home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / dosref.EXE / CHAPTER.005 < prev    next >
Text File  |  1996-01-31  |  181KB  |  3,586 lines

  1.  
  2.    **  Programmer's Technical Reference for MSDOS and the IBM PC **
  3.  
  4.                         C H A P T E R   F I V E
  5.  
  6.                       INTERRUPTS 22H THROUGH 0FFH
  7.  
  8.  
  9.                             C O N T E N T S
  10.  
  11. Interrupt 22h   Terminate Address .............................. 5**1
  12. Interrupt 23h   Ctrl-Break Exit Address ........................ 5**2
  13. Interrupt 24h   Critical Error Handler ......................... 5**3
  14. Interrupt 25h   Absolute Disk Read ............................. 5**4
  15. Interrupt 26h   Absolute Disk Write ............................ 5**5
  16. Interrupt 27h   Terminate And Stay Resident .................... 5**6
  17. Interrupt 28h   DOS Idle Interrupt ............................. 5**7
  18. Interrupt 29h   Fast Screen Write .............................. 5**8
  19. Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt ... 5**9
  20. Interrupt 2Bh   Unknown ........................................ 5**10
  21. Interrupt 2Ch   Unknown ........................................ 5**11
  22. Interrupt 2Dh   Unknown ........................................ 5**12
  23. Interrupt 2Eh   Alternate EXEC (DOS 2.0+) ...................... 5**13
  24. Interrupt 2Fh   Multiplex Interrupt ............................ 5**14
  25. Interrupt 30h   FAR jump instruction for CP/M-style calls ...... 5**15
  26. Interrupt 31h   Unknown ........................................ 5**16
  27. Interrupt 32h   Unknown ........................................ 5**17
  28. Interrupt 33h   Used by Microsoft Mouse Driver Function Calls .. 5**18
  29. Interrupt 34h   Turbo/Microsoft langs - Floating Point emul. ... 5**19
  30. Interrupt 35h   Turbo/Microsoft langs - Floating Point emul. ... 5**20
  31. Interrupt 36h   Turbo/Microsoft langs - Floating Point emul. ... 5**21
  32. Interrupt 37h   Turbo/Microsoft langs - Floating Point emul. ... 5**22
  33. Interrupt 38h   Turbo/Microsoft langs - Floating Point emul. ... 5**23
  34. Interrupt 39h   Turbo/Microsoft langs - Floating Point emul. ... 5**24
  35. Interrupt 3Ah   Turbo/Microsoft langs - Floating Point emul. ... 5**25
  36. Interrupt 3Bh   Turbo/Microsoft langs - Floating Point emul. ... 5**26
  37. Interrupt 3Ch   Turbo/Microsoft langs - Floating Point emul. ... 5**27
  38. Interrupt 3Dh   Turbo/Microsoft langs - Floating Point emul. ... 5**28
  39. Interrupt 3Eh   Turbo/Microsoft langs - Floating Point emul. ... 5**29
  40. Interrupt 3Fh   Overlay Manager Interrupt (Microsoft LINK.EXE) . 5**30
  41. Interrupt 40h   Hard Disk BIOS ................................. 5**31
  42. Interrupt 41h   Hard Disk Parameters ........................... 5**32
  43. Interrupt 42h   Pointer to screen BIOS entry ................... 5**33
  44. Interrupt 43h   Pointer to EGA Graphics Character Table ........ 5**34
  45. Interrupt 44h   Pointer to graphics character table ............ 5**35
  46. Interrupt 45h   Reserved by IBM  (not initialized) ............. 5**36
  47. Interrupt 46h   Pointer to second hard disk parameter block .... 5**37
  48. Interrupt 47h   Reserved by IBM  (not initialized) ............. 5**38
  49. Interrupt 48h   Cordless Keyboard Translation .................. 5**39
  50. Interrupt 49h   Non-kbd Scan Code Translation Table Addr (PCjr)  5**40
  51. Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2) ...... 5**41
  52. Interrupt 4Bh   Reserved by IBM  (not initialized) ............. 5**42
  53. Interrupt 4Ch   Reserved by IBM  (not initialized) ............. 5**43
  54. Interrupt 4Dh   Reserved by IBM  (not initialized) ............. 5**44
  55. Interrupt 4Eh   Reserved by IBM  (not initialized) ............. 5**45
  56. Interrupt 4Fh   Reserved by IBM  (not initialized) ............. 5**46
  57. Interrupt 50-57 IRQ0-IRQ7 Relocation ........................... 5**47
  58. Interrupt 58h   Reserved by IBM  (not initialized) ............. 5**48
  59. Interrupt 59h   Reserved by IBM  (not initialized) ............. 5**49
  60. Interrupt 5Ah   Reserved by IBM  (not initialized)  ............ 5**50
  61. Interrupt 5Bh   Reserved by IBM  (not initialized) ............. 5**51
  62. Interrupt 5Ah   Cluster Adapter BIOS entry address ............. 5**52
  63. Interrupt 5Bh   Reserved by IBM  (not initialized) ............. 5**53
  64. Interrupt 5Ch   NETBIOS interface entry port, TOPS ............. 5**54
  65. Interrupt 5Dh   Reserved by IBM  (not initialized) ............. 5**55
  66. Interrupt 5Eh   Reserved by IBM  (not initialized) ............. 5**56
  67. Interrupt 5Fh   Reserved by IBM  (not initialized) ............. 5**57
  68. Interrupt 60h-67h  User Program Interrupts ..................... 5**58
  69. Interrupt 60h   Network OS Interface ........................... 5**59
  70. Interrupt 67h   Expanded Memory Board Driver Interrupt ......... 5**60
  71. Interrupt 68h   Not Used  (not initialized) .................... 5**61
  72. Interrupt 69h   Not Used  (not initialized) .................... 5**62
  73. Interrupt 6Ah   Not Used  (not initialized) .................... 5**63
  74. Interrupt 6Bh   Not Used  (not initialized) .................... 5**64
  75. Interrupt 6Ch   System Resume Vector (Convertible) ............. 5**65
  76. Interrupt 6Dh   Not Used  (not initialized) .................... 5**66
  77. Interrupt 6Eh   Not Used  (not initialized) .................... 5**67
  78. Interrupt 6Fh   10-Net API...................................... 5**68
  79. Interrupt 70h   IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) .. 5**69
  80. Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) .. 5**70
  81. Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved ........... 5**71
  82. Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved ........... 5**72
  83. Interrupt 74h   IRQ 12  Mouse Interrupt (PS/2) ................. 5**73
  84. Interrupt 75h   IRQ 13, Coprocessor Error (AT) ................. 5**74
  85. Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2)  5**75
  86. Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved ............ 5**76
  87. Interrupt 78h   Not Used ....................................... 5**77
  88. Interrupt 79h   Not Used ....................................... 5**78
  89. Interrupt 7Ah   Reserved ....................................... 5**79
  90. Interrupt 7Bh-7Eh  Not Used by IBM ............................. 5**80
  91. Interrupt 7Ch   REXX-PC API .................................... 5**81
  92. Interrupt 7Fh   IBM 8514/A Graphics Adapter API ................ 5**82
  93. Interrupt 80h-85h  Reserved by BASIC ........................... 5**83
  94. Interrupt 86h   Int 18 when relocated by NETBIOS ............... 5**84
  95. Interrupt 86h-0F0h  Used by BASIC when interpreter is running .. 5**85
  96. Interrupt 0A4h  Right Hand Man API ............................. 5**86
  97. Interrupt 0D4h  PC-MOS/386 API ................................. 5**87
  98. Interrupt 0E0h  Digital Research CP/M-86 function calls ........ 5**88
  99. Interrupt 0E1h  PC Cluster Disk Server Information ............. 5**89
  100. Interrupt 0E2h  PC Cluster Program ............................. 5**90
  101. Interrupt 0E4h  Logitech Modula-2 v2.0   Monitor Entry ......... 5**91
  102. Interrupt 0E5h  Not Used ....................................... 5**92
  103. Interrupt 0E6h  Not Used ....................................... 5**93
  104. Interrupt 0E7h  Not Used ....................................... 5**94
  105. Interrupt 0E8h  Not Used ....................................... 5**95
  106. Interrupt 0E9h  Not Used ....................................... 5**96
  107. Interrupt 0EAh  Not Used ....................................... 5**97
  108. Interrupt 0EBh  Not Used ....................................... 5**98
  109. Interrupt 0ECh  Not Used ....................................... 5**99
  110. Interrupt 0EDh  Not Used ....................................... 5**100
  111. Interrupt 0EEh  Not Used ....................................... 5**101
  112. Interrupt 0EFh  GEM interface (Digital Research) ............... 5**102
  113. Interrupt 0F0h  unknown ........................................ 5**103
  114. Interrupts 0F1h-0FFh  (absolute addresses 3C4h-3FFh) ........... 5**104
  115. Interrupt 0F4h  Not Used ............ .......................... 5**105
  116. Interrupt 0F5h  Not Used ............ .......................... 5**106
  117. Interrupt 0F8h  Set Shell Interrupt (OEM) ...................... 5**107
  118. Interrupt 0F9h  Reserved ....................................... 5**108
  119. Interrupt 0FAh  USART ready (RS-232C) .......................... 5**109
  120. Interrupt 0FBh  USART RS ready (keyboard) ...................... 5**110
  121. Interrupt 0FCh  Unknown ........................................ 5**111
  122. Interrupt 0FDh  reserved for user interrupt .................... 5**112
  123. Interrupt 0FEh  reserved by IBM ................................ 5**113
  124. Interrupt 0FFh  reserved by IBM ................................ 5**114
  125.  
  126.  
  127. ┌─────────────────────────────────────────────────────────────────────┐
  128. │Interrupt 22h   Terminate Address ............................. 5**1 │
  129. └─────────────────────────────────────────────────────────────────────┘
  130. (0:0088h)
  131.   This interrupt transfers control to the far (dword) address at this 
  132. interrupt location when an application program terminates.  The default 
  133. address for this interrupt is 0:0088h through 0:008Bh.  This address is 
  134. copied into the program's Program Segment Prefix at bytes 0Ah through 
  135. 0Dh at the time the segment is created and is restored from the PSP 
  136. when the program terminates.  The calling program is normally 
  137. COMMAND.COM or an application.  Do not issue this interrupt directly, 
  138. as the EXEC function call does this for you.  If an application spawns 
  139. a child process, it must set the Terminate Address prior to issuing 
  140. the EXEC function call, otherwise when the second program terminated 
  141. it would return to the calling program's Terminate Address rather than 
  142. its own.  This address may be set with int 21, function 25h. 
  143.  
  144.  
  145. ┌─────────────────────────────────────────────────────────────────────┐
  146. │Interrupt 23h   Ctrl-Break Exit Address ....................... 5**2 │
  147. └─────────────────────────────────────────────────────────────────────┘
  148. (0:008Ch)
  149.   If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or 
  150. STDAUX, int 23h is executed.  If BREAK is on, int 23h is checked on 
  151. MOST function calls (notably 06h).  If the user written Ctrl-Break 
  152. routine saves all registers, it may end with a return-from-interrupt 
  153. instruction (IRET) to continue program execution.  If the user-written 
  154. interrupt program returns with a long return, the carry flag is used 
  155. to determine whether the program will be aborted.  If the carry flag is 
  156. set, the program is aborted, otherwise execution continues (as with a 
  157. return by IRET).  If the user-written Ctrl-Break interrupt uses 
  158. function calls 09h or 0Ah, (Display String or Buffered Keyboard Input) 
  159. then a three-byte string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT. 
  160. If execution is continued with an IRET, I/O continues from the start 
  161. of the line.  When the interrupt occurs, all registers are set to the 
  162. value they had when the original function call to DOS was made. 
  163.  
  164.   There are no restrictions on what the Ctrl-Break handler is allowed 
  165. to do, including DOS function calls, as long as the registers are 
  166. unchanged if an IRET is used. 
  167.  
  168.   If the program creates a new segment and loads a second program 
  169. which itself changes the Ctrl-Break address, the termination of the 
  170. second program and return to the first causes the Ctrl-Break address 
  171. to be restored from the PSP to the value it had before execution of 
  172. the second program. 
  173.  
  174.   DOS can check for a Ctrl-C at a couple of different places.  In at 
  175. least some cases, the value in the AX register on entry to the int 23h 
  176. handler is the same as it was on the original entry to int 21h. 
  177.  
  178.   COMMAND.COM makes use of this fact in its int 23h handler.  When 
  179. running a batch file, if you press Ctrl-C it prompts you with the 
  180. "Terminate batch job (Y/N)?" question.  If you press Ctrl-C in 
  181. response to that question, the int 23h handler notices that it's being 
  182. called recursively (having set an internal flag), and uses the value 
  183. of AX to determine how far it had gotten on the previous pass.  If you 
  184. have not responded to the query yet, it asks it again; otherwise it 
  185. just terminates the current program. 
  186.  
  187.   This could cause a problem in a program which was catching int 23h 
  188. so that it could release EMS or other resources  on exit, then pass it 
  189. on to the original handler.  When called a second time, it would 
  190. correctly notice that it had already cleaned up and wouldn't do it 
  191. again, but by the time it got to the original handler, AX would be 
  192. trashed.  The result would be the standard "Memory allocation 
  193. error/Cannot load COMMAND, system halted". 
  194.  
  195.   Apparently, if you want to catch int 23h but also pass it on to the 
  196. original handler, you should either save and restore registers, or 
  197. restore the original vector on the first trap so you don't get invoked 
  198. again. 
  199.  
  200.  
  201.  
  202. ┌─────────────────────────────────────────────────────────────────────┐
  203. │Interrupt 24h   Critical Error Handler ........................ 5**3 │
  204. └─────────────────────────────────────────────────────────────────────┘
  205. (0:0090h)
  206.  
  207.   When an unrecoverable I/O error occurs, control is transferred to an 
  208. error handler in the resident part of COMMAND.COM with an int 24h.  
  209. This may be the standard DOS error handler (Abort, Retry, Ignore, 
  210. Fail?) or a user-written routine. 
  211.  
  212.   On entry to the error handler, AH will have its bit 7=0 (high order 
  213. bit) if the error was a disk error (probably the most common error), 
  214. bit 7=1 if not. 
  215.  
  216.   BP:SI contains the address of a Device Header Control Block from 
  217. which additional information can be retrieved (see below).  The 
  218. register is set up for a retry operation and an error code is in the 
  219. lower half of the DI register with the upper half undefined. 
  220.  
  221.   DOS places the following items on the user stack.  The stack 
  222. contains the following from top to bottom: 
  223.  
  224.         IP   │   DOS registers from the issuing int 24h
  225.         CS   │
  226.       flags  │
  227.       ───────┼───────────────────────────────────────────────────────
  228.         AX   │   user registers at time of original int 21h request
  229.         BX   │
  230.         CX   │
  231.         SI   │
  232.         DI   │
  233.         BP   │
  234.         DS   │
  235.         ES   │
  236.       ───────┼───────────────────────────────────────────────────────
  237.         IP   │   original int 21h from the user to DOS
  238.         CS   │
  239.       flags  │
  240.  
  241.   To reroute the critical error handler to a user-written critical
  242. error handler, the following should be done:
  243.  
  244. Before an int 24h occurs:
  245. 1) The user application initialization code should save the int 24h
  246.    vector and replace the vector with one pointing to the user error
  247.    routine.
  248.  
  249. When the int 24h occurs:
  250. 2) When the user error routine received control it should push the flag
  251.    registers onto the stack and execute a far call to the original int
  252.    24h vector saved in step 1.
  253. 3) DOS gives the appropriate prompt, and waits for user input (Abort,
  254.    Retry, Ignore, Fail).  After the user input, DOS returns control to
  255.    the user error routine instruction following the far call.
  256. 4) The user error routine can now do any tasks necessary.  To return
  257.    to the original application at the point the error occurred, the
  258.    error routine needs to execute an IRET instruction.  Otherwise, the
  259.    user error routine should remove the IP, CS, and flag registers from
  260.    the stack.  Control can then be passed to the desired routine.
  261.  
  262.   Int 24h provides the following values in registers on entry to the
  263. interrupt handler:
  264.  
  265. entry   AH      status byte (bits)
  266.                 7       0       disk I/O hard error
  267.                         1       other error - if block device, bad FAT
  268.                                 - if char device, code in DI
  269.                 6       unused
  270.                 5       0       if IGNORE is not allowed
  271.                         1       if IGNORE is allowed
  272.                 4       0       if RETRY  is not allowed
  273.                         1       if RETRY  is allowed
  274.                 3       0       if FAIL   is not allowed
  275.                         1       if FAIL   is allowed
  276.                 2 \     disk area of error  00 = DOS area  01 = FAT
  277.                 1 /                         10 = root dir  11 = data area
  278.                 0       0       if read operation
  279.                         1       if write operation
  280.         AL      drive number if AH bit 7 = 1, otherwise undefined
  281.                 If it is a hard error on disk (AH bit 7=0), register AL
  282.                 contains the failing drive number (0=A:, 1=B:, etc.).
  283.         BP:SI   address of a Device Header Control Block for which error
  284.                 occurred. Block device if high bit of BP:SI+4 = 1
  285.         DI      (low byte) error code (note: high byte is undefined)
  286.                error code                 description
  287.                 00h             attempt to write on write-protected diskette
  288.                 01h             unknown unit
  289.                 02h             drive not ready
  290.                 03h             unknown command
  291.                 04h             data error (bad CRC)
  292.                 05h             bad request structure length
  293.                 06h             seek error
  294.                 07h             unknown media type
  295.                 08h             sector not found
  296.                 09h             printer out of paper
  297.                 0Ah             write fault
  298.                 0Bh             read fault
  299.                 0Ch             general failure
  300.                 0Fh             invalid disk change      (DOS 3.0+)
  301.                 10h             FCB unavailable          (DOS 3.0+)
  302.                 11h             sharing buffer overflow  (DOS 3.0+)
  303.  
  304.         note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
  305.  
  306. The handler must return this information:
  307.  
  308.   The registers are set such that if an IRET is executed, DOS responds
  309. according to (AL) as follows:
  310. AL      00h     IGNORE the error
  311.         01h     RETRY the operation
  312.         02h     ABORT via int 22h (jump to terminate address)
  313.         03h     FAIL the system call that is in progress (DOS 3.0+)
  314. note 1) Be careful when choosing to ignore a response because this
  315.         causes DOS to think that an operation has completed
  316.         successfully when it may not have.
  317.      2) If the error was a character device, the contents of AL are
  318.         invalid.
  319.      3) Early PS/2 BIOSes did not perform a retry on disk errors until
  320.         a disk had been read at least once after boot-up.
  321.  
  322.  
  323. Other Errors
  324.  
  325.   If AH bit 7=1, the error occurred on a character device, or was the 
  326. result of a bad memory image of the FAT.  The device header passed in 
  327. BP:SI can be examined to determine which case exists.  If the 
  328. attribute byte high-order bit indicates a block device, then the error 
  329. was a bad FAT.  Otherwise, the error is on a character device. 
  330.  
  331.   If a character device is involved, the contents of AL are 
  332. unpredictable, and the error code is in DI as above. 
  333.  
  334. note 1) Before giving this routine control for disk errors, DOS 
  335.         performs several retries.  The number of retries varies 
  336.         according to the DOS version. 
  337.      2) For disk errors, this exit is taken only for errors occurring 
  338.         during an int 21h function call.  It is not used for errors 
  339.         during an int 25h or 26h. 
  340.      3) This routine is entered in a disabled state. 
  341.      4) All registers must be preserved. 
  342.      5) This interrupt handler should refrain from using DOS function 
  343.         calls.  If necessary, it may use calls 01h through 12h.  Use 
  344.         of any other call destroys the DOS stack and leaves DOS in an 
  345.         unpredictable state. 
  346.      6) The interrupt handler must not change the contents of the 
  347.         device header. 
  348.      7) If the interrupt handler handles errors itself rather than 
  349.         returning to DOS, it should restore the application program's 
  350.         registers from the stack, remove all but the last three words 
  351.         on the stack, then issue an IRET.  This will return to the 
  352.         program immediately after the int 21h that experienced the 
  353.         error.  Note that if this is done DOS will be in an unstable 
  354.         state until a function call higher than 12h is issued, 
  355.         therefore not recommended. 
  356.      8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for 
  357.         critical errors that occur on FAT or DIR sectors. 
  358.      9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL 
  359.         requests for network critical errors (50-79). 
  360.     10) The device header pointed to by BP:SI is as follows: 
  361.        dword    pointer to next device (0FFFFh if last device)
  362.         word    attributes:
  363.                 bit     15      1  if character device.
  364.                                    If bit 15 is 1:
  365.                                    bit 0 = 1 if current standard input
  366.                                    bit 1 = 1 if current standard output
  367.                                    bit 2 = 1 if current NULL device
  368.                                    bit 3 = 1 if current CLOCK device
  369.                                 0  if block device.
  370.                 bit     14      is the IOCTL bit
  371.         word    pointer to device driver strategy entry point
  372.         word    pointer to device driver interrupt entry point
  373.       8 bytes   character device named field for block devices.  The
  374.                 first byte is the number of units.
  375.     11) To tell if the error occurred on a block or character device,
  376.         look at bit 15 in the attribute field (WORD at BP:SI+4).
  377.     12) If the name of the character device is desired, look at the
  378.         eight bytes starting at BP:SI+10.
  379.  
  380.  
  381. Handling of Invalid Responses (DOS 3.0+)
  382.  
  383.      A) If IGNORE (AL=0) is specified by the user and IGNORE is not 
  384.         allowed (bit 5=0), make the response FAIL (AL=3). 
  385.      B) If RETRY (AL=1) is specified by the user and RETRY is not 
  386.         allowed (bit 4=0), make the response FAIL (AL=3). 
  387.      C) If FAIL (AL=3) is specified by the user and FAIL is not 
  388.         allowed (bit 3=0), make the response ABORT. (AL=2) 
  389.  
  390.  
  391.  
  392.  
  393. ┌─────────────────────────────────────────────────────────────────────┐
  394. │Interrupt 25h   Absolute Disk Read ............................ 5**4 │
  395. │Interrupt 26h   Absolute Disk Write ........................... 5**5 │
  396. └─────────────────────────────────────────────────────────────────────┘
  397. (0:0094h, 0:0098h)
  398.  
  399.   These transfer control directly to the disk device driver.  On 
  400. return, the original flags are still on the stack (put there by the 
  401. INT instruction).  This is necessary because return information is 
  402. passed back in the current flags. All registers except the segment 
  403. registers are destroyed by these calls. 
  404.  
  405.   These interrupts should be avoided for software that is intended to 
  406. run on a network, as they may cause troubles in network environments. 
  407.  
  408.   PC-MOS/386 provides these services only for compatibility with 
  409. existing DOS-mode apps.  25h/26h are not available for native mode 
  410. 386-mode DOS apps. 
  411.  
  412.   The number of sectors specified is transferred between the given 
  413. drive and the transfer address.  Logical sector numbers are obtained 
  414. by numbering each sector sequentially starting from track 0, head 0, 
  415. sector 1 (logical sector 0) and continuing along the same head, then 
  416. to the next head until the last sector on the last head of the track 
  417. is counted.  Thus, logical sector 1 is track 0, head 0, sector 2; 
  418. logical sector 2 is track 0, head 0, sector 3; and so on.  Numbering 
  419. then continues wih sector 1 on head 0 of the next track.  Note that 
  420. although the sectors are sequentially numbered (for example, sectors 2 
  421. and 3 on track 0 in the example above), they may not be physically 
  422. adjacent on disk, due to interleaving.  Note that the mapping is 
  423. different from that used by DOS 1.10 for double-sided diskettes. 
  424.  
  425.  The request is as follows:
  426.  
  427. int 25h for Absolute Disk Read,      | except Compaq DOS 3.31 or DOS 4.0+
  428. int 26h for Absolute Disk Write      | over-32Mb partitions
  429. entry   AL      drive number (0=A:, 1=B:, etc)
  430.         CX      number of sectors to read (int 25h) or write (int 26h)
  431.         DS:BX   segment/offset of disk transfer address buffer (DTA)
  432.         DX      first relative sector to read - beginning logical sector
  433.                 number
  434. return  CF      set if error
  435.         AL      error code issued to int 24h in low half of DI
  436.         AH      01h     bad command
  437.                 02h     bad address mark
  438.                 03h     write-protected disk
  439.                 04h     requested sector not found
  440.                 08h     DMA failure
  441.                 10h     data error (bad CRC)
  442.                 20h     controller failed
  443.                 40h     seek operation failed
  444.                 80h     attachment failed to respond
  445. note 1) DOS returns with a far ret which leave the original flags on 
  446.         the stack.  Be sure to pop the stack to prevent uncontrolled 
  447.         growth. 
  448.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and 
  449.         later make special provision for adjusting the stack on int 
  450.         25h and 26h.  This probably won't hurt anything but you should 
  451.         be aware of it. 
  452.      3) Ints 25h and 26h will try rereading a disk if they get an 
  453.         error the first time. 
  454.  
  455.   To address partition sizes greater than 32Mb an extended format is 
  456. provided in Compaq DOS 3.31, DOS 4.0, and DR-DOS.  This format passes 
  457. a 32-bit address value by means of a parameter block.  The extended 
  458. format may be used to address disks smaller than 32Mb as well as 
  459. larger. 
  460.  
  461.  The request is as follows:
  462.  
  463. int 25h for Absolute Disk Read,            | Compaq DOS 3.31 or DOS 4.0+
  464. int 26h for Absolute Disk Write            | over-32Mb partitions
  465. entry   AL      drive number (0=A:, 1=B:, etc)
  466.         CX      0FFFFh
  467.         DS:BX   address of parameter block. Block format:
  468.               4 bytes    sector number
  469.               2 bytes    number of sectors to read
  470.               4 bytes    FAR pointer to buffer
  471. return  CF      set if error
  472.         AL      error code issued to int 24h in low half of DI
  473.         AH      01h     bad command
  474.                 02h     bad address mark
  475.                 03h     write-protected disk
  476.                 04h     requested sector not found
  477.                 08h     DMA failure
  478.                 10h     data error (bad CRC)
  479.                 20h     controller failed
  480.                 40h     seek operation failed
  481.                 80h     attachment failed to respond
  482. note 1) DOS returns with a far ret which leave the original flags on 
  483.         the stack. Be sure to pop the stack to prevent uncontrolled 
  484.         growth. 
  485.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and 
  486.         later make special provision for adjusting the stack on int 
  487.         25h and 26h.  This probably won't hurt anything but you should 
  488.         be aware of it. 
  489.      3) Ints 25h and 26h will try rereading a disk if they get an 
  490.         error the first time. 
  491.      4) Partition is potentially >32M (and requires this form of the 
  492.         call) if bit 1 of device attribute word in device driver is 
  493.         set. 
  494.      5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS 
  495.         Environment Software Interrupt Support", it lists:
  496.         25h  direct read       supported
  497.         26h  direct write      an error is returned on requests for 
  498.                                non-removable media 
  499.  
  500.   Interrupts 25h and 26h can read logical sectors only.  They cannot 
  501. read hidden sectors. 
  502.  
  503.   Critical errors are not processed by ints 25h and 26h.  Should one 
  504. happen, the  interrupt routine will return an error value to the 
  505. program but will not itself call the critical error handler at int 
  506. 24h. 
  507.   
  508.  The Microsoft DOS 5.0 Technical Reference refers to this call as 
  509. "superceded" and directs you to int 21h, fn 440Dh, minor code 61h, 
  510. "Read Track on Logical Drive" and minor code 41h, "Write Track on 
  511. Logical Drive."  See Chapter 4. 
  512.  
  513.  
  514. ┌─────────────────────────────────────────────────────────────────────┐
  515. │Interrupt 27h   Terminate And Stay Resident ................... 5**6 │
  516. └─────────────────────────────────────────────────────────────────────┘
  517. (0:009Ch)       (obsolete)
  518.   This vector is used by programs that are to remain resident when 
  519. COMMAND.COM regains control. 
  520.  
  521.   After initializing itself, the program must set DX to its last 
  522. address plus one relative to the program's initial DS or ES value (the 
  523. offset at which other programs can be loaded), then execute interrupt 
  524. 27h.  DOS then considers the program as an extension of itself, so the 
  525. program is not overlaid when other programs are executed.  This is 
  526. useful for loading programs such as utilities and interrupt handlers 
  527. that must remain resident. 
  528.  
  529. entry   CS      current program segment
  530.         DX      last program byte + 1
  531. return  none
  532. note 1) This interrupt must not be used by .EXE programs that are 
  533.         loaded into the high end of memory. 
  534.      2) This interrupt restores the interrupt 22h, 23h, and 24h 
  535.         vectors in the same manner as interrupt 20h.  Therefore, it 
  536.         cannot be used to install permanently resident Ctrl-Break or 
  537.         critical error handler routines. 
  538.      3) The maximum size of memory that can be made resident by this 
  539.         method is 64K. 
  540.      4) Memory can be more efficiently used if the block containing a 
  541.         copy of the environment is deallocated before terminating.  
  542.         This can be done by loading ES with the segment contained in 
  543.         2Ch of the PSP, and issuing function call 49h (Free Allocated 
  544.         Memory). 
  545.      5) DOS function call 4Ch allows a program to pass a completion 
  546.         code to DOS, which can be interpreted with processing (see 
  547.         function call 31h). 
  548.      6) If int 27h is called by a program linked with the /HIGH 
  549.         switch, it will occupy the top of memory and prevent 
  550.         COMMAND.COM from reloading, which is probably not what you 
  551.         want. 
  552.      7) Int 21, function 31h is the preferred method to cause a 
  553.         program to remain resident because this allows return 
  554.         information to be passed and allows a program larger than 64K 
  555.         to remain resident. 
  556.      8) It is possible to make an EXE program resident with this call 
  557.         by putting a 27h in the second byte of the PSP and terminating 
  558.         with a RET FAR. 
  559.      9) Programs terminating with int 27h do not close files on exit. 
  560.         Your program must explicitly close any opened files before 
  561.         going resident. 
  562.     10) Int 27h does not work correctly when DX contains values from 
  563.         0FFF1h to 0FFFFh.  In this case, DOS discards the high bit of 
  564.         the contents of DX, resulting in 32k less resident memory than 
  565.         was requested by the program. 
  566.     11) This interrupt will work with PC-MOS/386, but there are a 
  567.         number of MOS-specific advantages to using int 21h/31h 
  568.         instead.  See Chapter 4 for further explanation. 
  569.  
  570.  
  571. ┌─────────────────────────────────────────────────────────────────────┐
  572. │Interrupt 28h   (not documented by Microsoft) ................. 5**7 │
  573. └─────────────────────────────────────────────────────────────────────┘
  574.            *    DOS Idle Interrupt
  575.  
  576.   Int 28h has been provided by DOS since release 2.0.  The int 28h 
  577. process is similar to the "Timer Tick" process provided by BIOS via 
  578. int 1Ch in that it is an "outbound" (from DOS) call which an 
  579. application can "hook onto" to get service at a particular entry 
  580. point.  DOS normally only issues int 28h when it recieves a function 
  581. call (int 21h) from a foreground application with an argument in the 
  582. range of 0 thru 12 (0Ch) in the AH register, or when it is idling 
  583. waiting for keyboard input.  In effect, when DOS issues int 28h, it is 
  584. saying to the background task "I'm not doing anything hot right now, 
  585. if you can use the time, go ahead."  This means that a foreground 
  586. application which doesn't do many low-number DOS functions can preempt 
  587. CPU time easily. 
  588.  
  589.   When int 28h is being issued it is usually safe to do DOS calls.  
  590. You won't get int 28hs if a program is running that doesn't do its 
  591. keyboard input through DOS.  You should rely on the timer interrupt 
  592. for these.  It is used primarily by the PRINT.COM routines, but any 
  593. number of other routines can be chained to it by saving the original 
  594. vector and calling it with a FAR call (or just JMPing to it) at the 
  595. end of the new routine. 
  596.  
  597.   Int 28h is not called at all when any non-trivial foreground task is 
  598. running. As soon as a foreground program has a file open, int 28h no 
  599. longer gets called. Could make a good driver for for a background 
  600. program that works as long as there is nothing else going on in the 
  601. machine. 
  602.  
  603.   DOS uses 3 separate internal stacks: one for calls 01h through 0Ch; 
  604. another for calls 0Dh and above; and a third for calls 01h through 0Ch 
  605. when a Critical Error is in progress.  When int 28h is called, any 
  606. calls above 0Ch can be executed without destroying the internal stack 
  607. used by DOS at the time. 
  608.  
  609.   The byte which is pushed on the stack before an int 28h just 
  610. indicates which stack area is being used by the current int 21h call.  
  611. In DOS 3.1, the code sequence that calls int 28h looks like this: 
  612.  
  613.         PUSH    SS:[0304]
  614.         INT     28
  615.         POP     SS:[0304]
  616.  
  617.   The low-order byte of the word pushed contains 1 if the int 21h call 
  618. currently in progress is for services 1 through 0Ch, and 0 for service 
  619. 0 and for 0Dh and up.  Assuming that the last DOS call was not a 
  620. reentrant one, this tells you which set of DOS services should be safe 
  621. to call. 
  622.  
  623. entry   no parameters available
  624. return  none
  625. note 1) The int 28h handler may invoke any int 21h function except 
  626.         functions 00h through 0Ch (and 50h/51h under DOS 2.x unless 
  627.         DOS CritErr flag is set). 
  628.      2) Apparently int 28h is also called during screen writes. 
  629.      3) Until some program installs its own routine, this interrupt 
  630.         vector simply points to an IRET opcode. 
  631.      4) Supported in OS/2 1.0's DOS Compatibility Box. 
  632.      5) It is possible, if you are careful, to enhance the background 
  633.         priority by providing more int 28h calls than DOS normally 
  634.         would issue. 
  635.      6) If the InDOS flag is zero on int 28h, then it was called by 
  636.         someone other than DOS, and the word on the stack should NOT 
  637.         be examined. 
  638.      7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h 
  639.         as a convenience for its SideKick product users.  Interrupt 28 
  640.         is the DOS busy flag which DESQview treats as a pause and 
  641.         gives up time... foreground gets little time and background 
  642.         gets a lot...reverse of normal." 
  643.      8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+. 
  644.  
  645.  
  646. ┌─────────────────────────────────────────────────────────────────────┐
  647. │Interrupt 29h   (not documented by Microsoft) ................. 5**8 │
  648. └─────────────────────────────────────────────────────────────────────┘
  649.            *    Internal - Quick Screen Output
  650.  
  651.   This method is extremely fast (much faster than DOS 21h subfunctions 
  652. 2 and 9, for example), and it is portable, even to "non-compatible" 
  653. MS-DOS computers. 
  654.  
  655. entry   AL      ASCII value for character to output to screen
  656. return  unknown
  657. note 1) Documented by Digital Equipment's DOS Reference as provided 
  658.         with the DEC Rainbow.  Also documented by Digital Research in 
  659.         the DR-DOS manual. 
  660.      2) If ANSI.SYS is installed, character output is filtered through 
  661.         it. 
  662.      3) Works on the IBM PC and compatibles, Wang PC, HP-150 and 
  663.         Vectra, DEC Rainbow, NEC APC, Texas Instruments PC and others. 
  664.      4) This interrupt is called from the DOS's output routines if 
  665.         output is going to a device rather than a file, and the device 
  666.         driver's attribute word has bit 3 (04h) set to "1". 
  667.      5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 
  668.         3.1, PCDOS 3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31. 
  669.      6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write 
  670.         TTY) followed by an IRET. 
  671.      7) Most of the fast ANSI device drivers use this interrupt - 
  672.         ZANSI.SYS, NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's 
  673.         DVANSI.SYS. 
  674.      8) When using int 29h to output characters the ASCII 7 (BELL) 
  675.         will suppress character output while the bell is sounding. 
  676.      9) When device drivers (or the SYSINIT module which loads the 
  677.         drivers) need to do console output, they use int 29h, to call 
  678.         the console device driver directly.  For example, messages 
  679.         telling you about errors in your CONFIG.SYS file are printed 
  680.         using this service. 
  681.  
  682.  
  683.  
  684. ┌─────────────────────────────────────────────────────────────────────┐
  685. │Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt .. 5**9 │
  686. └─────────────────────────────────────────────────────────────────────┘
  687.         1)  This interrupt was not officially documented by Microsoft 
  688.             until the release of Windows 3.0, which has setup 
  689.             parameters for int 2Ah. 
  690.         2)  LANtastic NetBIOS interface, original IBM PC LAN 
  691.             interface. 
  692.         3)  NetBIOS alternate interface.  The alternate interface 
  693.             (2Ah) was originally designed as a "higher" level 
  694.             interface to network communications rather than the "low" 
  695.             level interface (5Ch) provided by the NETBIOS.  The 2Ah 
  696.             interface, however, does not support any higher level 
  697.             functions than does the 5Ch interface and therefore has 
  698.             not become a de facto standard as has the 5Ch interface. 
  699.         4)  Most DOS 4.0 external programs (SHARE, etc) check this 
  700.             interrupt during installation. 
  701.  
  702. entry   AH      00h     Check for Int 2Ah Network BIOS Installation
  703.                         return  AH      nonzero if installed
  704.                 01h     Execute NETBIOS Request (no error retry)
  705.                         ES:BX   pointer to NCB
  706. return          AL      NETBIOS error code
  707.                 AH      00h     if no error
  708.                         01h     if error
  709.                 02h     Set Net Printer Mode
  710.                 03h     Get Shared-Device Direct I/O Status
  711.                         AL      00h
  712.                         DS:SI   pointer to ASCIIZ disk device name
  713.                         return  CF      clear   if allowed
  714.                                         set     if denied
  715.                         note 1) Direct I/O is through ints 13h, 25h, or 
  716.                                 26h. 
  717.                              2) If the device is redirected (see int 
  718.                                 21h/5F02h) or this call returns with 
  719.                                 carry set, the program should not 
  720.                                 perform direct disk I/O. 
  721.                              3) The device pointed to by DS:SI must 
  722.                                 include the colon in the drive:pathname. 
  723.                              4) It may take some time for this call to 
  724.                                 return to the calling program. Do not 
  725.                                 use in time-sensitive applications. 
  726.                 04h     Execute NETBIOS
  727.                         AL      00h     retry on error
  728.                                 01h     no retry on error
  729.                         ES:BX   pointer to network control block
  730.                         return  AX      0000h   for no error
  731.                                 AH      01h     if error
  732.                                         AL      error code (unknown)
  733.                         note 1) IBM PC LAN says, "for adapter 
  734.                                 independence, use int 2Ah. No not use 
  735.                                 5Ch function provided by the network 
  736.                                 adapter." 
  737.                              2) Error codes that are automatically 
  738.                                 retried are: 
  739.                                 09h     no session resources available
  740.                                 12h     session open rejected
  741.                                 21h     interface busy
  742.                 05h     Get Network Resource Information
  743.                         AL      00h
  744.                         return  AX      reserved
  745.                                 BX      # of network names (16 - names in 
  746.                                         use) 
  747.                                 CX      number of available NCB commands 
  748.                                 DX      number of sessions (max - pending) 
  749.                 06h     Network Print-Stream Control
  750.                 (IBM PC LAN)
  751.                         AL      01h     Set spooled output to
  752.                                         concatenation mode
  753.                                 02h     Set spooled output to
  754.                                         truncation mode
  755.                                 03h     Trunate printer stream
  756.                         return  CF      clear   no error
  757.                                         set     AX      DOS error code
  758.                 (LANtastic)
  759.                         AL      01h     Set spooled output to combined
  760.                                         mode
  761.                                 return  none
  762.                                 02h     Set spooled output in separate
  763.                                         mode
  764.                                 return  none
  765.                                 note    Printer output is not combined 
  766.                                         when multiple programs are run or 
  767.                                         when the printer is opened or 
  768.                                         closed. This cmd. implicitly 
  769.                                         starts a new print job. 
  770.                                 03h     Flush printer output 
  771.                                 return  none 
  772.                                 note 1) Printer output is flushed and a 
  773.                                         new print job is started. If no 
  774.                                         output exists to be flushed then 
  775.                                         this function has no affect. 
  776.                                      2) 03h is equivalent to 
  777.                                         Ctrl/Alt/keypad-* 
  778.                         note    NETBIOS 1.10
  779.                 07h-19h unknown
  780.                 20h     unknown
  781.                         note    AL=01h intercepted by DESQview 2.0.
  782.                 23h     Receive Broadcast Datagram
  783.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  784.                 80h     Begin DOS Critical Section
  785.                         AL      critical section number (1 to 6)
  786.                 note    SHARE.EXE uses critical section number 01h.
  787.                 81h     End DOS Critical Section
  788.                         AL      critical section number (1 to 6)
  789.                 note    SHARE.EXE uses critical section number 01h.
  790.                 82h     Server Hook
  791.                         stack   AX from call to int 21h
  792.                         return  stack unchanged
  793.                         note    Called by the int 21h function dispatcher
  794.                                 in DOS 3.10+ for function 0 and functions
  795.                                 greater than 0Ch except 59h.
  796.                 84h     Keyboard Busy Loop
  797.                         note    Same functionality as DOS's int 28h?
  798.                 87h     Used by DOS PRINT to mark Critical Regions:
  799.                         AL      00h     Begin Critical Region
  800.                                 01h     End Critical Region
  801.                         return  CF      set     region already active
  802.                0A3h     Receive Broadcast Datagram
  803.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  804.  
  805.  
  806. ┌─────────────────────────────────────────────────────────────────────┐
  807. │Interrupt 2Bh   (not documented by Microsoft) ................. 5**10│
  808. └─────────────────────────────────────────────────────────────────────┘
  809.            *    Unknown - Internal Routine for DOS (IRET)
  810.  
  811.  
  812. ┌─────────────────────────────────────────────────────────────────────┐
  813. │Interrupt 2Ch   (not documented by Microsoft) ................. 5**11│
  814. └─────────────────────────────────────────────────────────────────────┘
  815.            *    Unknown - Internal Routine for DOS (IRET)
  816.  
  817.  
  818. ┌─────────────────────────────────────────────────────────────────────┐
  819. │Interrupt 2Dh   (not documented by Microsoft) ................. 5**12│
  820. └─────────────────────────────────────────────────────────────────────┘
  821.            *    Unknown - Internal Routine for DOS (IRET)
  822.  
  823.  
  824. ┌─────────────────────────────────────────────────────────────────────┐
  825. │Interrupt 2Eh   (undocumented by Microsoft)  (DOS 2.0+) ....... 5**13│
  826. └─────────────────────────────────────────────────────────────────────┘
  827.            *    Internal Routine for DOS  (Alternate EXEC)
  828.  
  829.   This interrupt passes a command line addressed by DS:SI to 
  830. COMMAND.COM.  The command line must be formatted just like the 
  831. unformatted parameter area of a Program Segment Prefix.  That is, the 
  832. first byte must be a count of characters, and the second and 
  833. subsequent bytes must be a command line with parameters, terminated by 
  834. a carriage return character. 
  835.  
  836.   When executed, int 2Eh will reload the transient part of the command 
  837. interpreter if it is not currently in memory.  If called from a 
  838. program that was called from a batch file, it will abort the batch 
  839. file.  If executed from a program which has been spawned by the EXEC 
  840. function, it will abort the whole chain and probably lock up the 
  841. computer.  Int 2Eh also destroys all registers including the stack 
  842. pointer. 
  843.  
  844.   Int 2Eh is called from the transient portion of the program to reset 
  845. the DOS PSP pointers using the above Functions #81 & #80, and then 
  846. reenters the resident program. 
  847.  
  848.   When called with a valid command line, the command will be carried 
  849. out by COMMAND.COM just as though you had typed it in at the DOS 
  850. prompt.  Note that the count does not include the carriage return.  
  851. This is an elegant way to perform a SET from an application program 
  852. against the master environment block for example. 
  853.  
  854. entry   DS:SI   pointer to an ASCIIZ command line in the form:
  855.                         count byte
  856.                         ASCII string
  857.                         carriage return
  858.                         null byte
  859. note 1) Destroys all registers including stack pointer. 
  860.      2) Seems to work OK in both DOS 2.x and 3.x. 
  861.      3) It is reportedly not used by DOS. 
  862.      4) As far as known, int 2Eh is not used by DOS 3.1, although it 
  863.         was called by COMMAND.COM of PCDOS 3.0, so it appears to be in 
  864.         3.1 only for the sake of compatibility. 
  865.      5) Not used by the aftermarket 4DOS command interpreter prior to 
  866.         version 3.0. 3.0 merely hooks this vector and does nothing 
  867.         with it.  3.02 and later provide a TSR to add 2Eh capability. 
  868.      6) Trapped by PC-MOS/386 to prevent illegal entry into the 
  869.         command processor. 
  870.  
  871.  
  872. ┌─────────────────────────────────────────────────────────────────────┐
  873. │Interrupt 2Fh   Multiplex Interrupt ........................... 5**14│
  874. └─────────────────────────────────────────────────────────────────────┘
  875.  
  876.  Interrupt 2Fh is the multiplex interrupt.  A general interface is 
  877. defined between two processes.  It is up to the specific application 
  878. using interrupt 2Fh to define specific functions and parameters. 
  879.  
  880.  This interrupt is becoming more commonly used as the available 
  881. interrupt 21 functions are getting to be in short supply.  Int 2Fh 
  882. doesn't require any support from DOS itself for it to be used in 
  883. application programs.  It's not handled by DOS, but by the programs 
  884. themselves. 
  885.  
  886.  Every multiplex interrupt handler is assigned a specific multiplex 
  887. number. The multiplex number is specified in the AH register; the AH 
  888. value tells which program your request is directed toward.  The 
  889. specific function that the handler is to perform is placed in the AL 
  890. register.  Other parameters are places in the other registers as 
  891. needed.  The handlers are chained into the 2Fh interrupt vector and 
  892. the multiplex number is checked to see if any other application is 
  893. using the same multiplex number.  There is no predefined method for 
  894. assigning a multiplex number to a handler.  You must just pick one.  
  895. To avoid a conflict if two applications choose the same multiplex 
  896. number, the multiplex numbers used by an application should be 
  897. patchable.  In order to check for a previous installation of the 
  898. current application, you can search memory for a unique string 
  899. included in your program.  If the value you wanted in AH is taken but 
  900. you don't find the string, then another application has grabbed that 
  901. location. 
  902.  
  903.   Int 2Fh was not documented under DOS 2.x.  There is no reason not to 
  904. use int 2Fh as the multiplex interrupt in DOS 2.x.  The only problem 
  905. is that DOS 2.x does not initialize the int 2Fh vector, so when you 
  906. try to chain to it like you are supposed to, it will crash.  If your 
  907. program checks the vector for being zero and initializes it itself or 
  908. doesn't chain in that case, it will work for you n 2.x just the same 
  909. as 3.x. 
  910.  
  911.   DOS 3.2 itself contains some int 2Fh handlers - it uses values of 
  912. 08h, 13h, and 0F8h.  There may be more.  NLSFUNC from DOS 3.3 up uses 
  913. part of int 2Fh and so does GRAFTABL. 
  914.  
  915.   For int 2Fh calls, register AH identifies which program is to handle 
  916. the interrupt.  AH values 00h-7Fh are reserved for DOS, not that 
  917. anyone cares much. Values 0C0h-0FFh are reserved for applications.  
  918. Register AL contains the subfunction code if used. 
  919.  
  920.   IBM has reported that PC-DOS 4.0 will sometimes hang when 
  921. substituting int 2Fh for int 67h for network calls.  Most of DOS 4.0's 
  922. external commands check the 2Fh PRINT and other statuses while 
  923. operating for enhanced network support. DOS 4.0 SHARE.EXE traps the 
  924. 2Fh interrupt.  IBM and Microsoft DOS programming information for 
  925. versions prior to 4.0 strongly imply that 2Fh functions not used by 
  926. PRINT.COM are open for general use.  DOS 4.0 uses quite a few 2Fh 
  927. functions and this may be a cause of incompatibility with some 
  928. software. 
  929.  
  930.   LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS 
  931. 4.x due to int 2Fh conflicts.  This conflict also occurs under DR-DOS 
  932. versions 3.40 and 3.41.  DR-DOS is internally similar to DOS 4.0. 
  933.  
  934.  
  935. Function   01h  PRINT.COM
  936.            PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
  937.                 05h     PrintScreen Interrupt
  938.                 13h     BIOS Disk Interrupt
  939.                 14h     BIOS Serial Communications Interrupt
  940.                 15h     BIOS "System Services" Interrupt
  941.                 17h     BIOS Printer Interrupt
  942.                 19h     Bootstrap Loader Interrupt
  943.                 1Ch     Timer Tick
  944.                 23h     Control-C Terminate Address
  945.                 24h     Critical Error Handler Address
  946.                 28h     DOS Idle Interrupt (undocumented)
  947.                 2Fh     Multiplex Interrupt
  948.  
  949. entry   AH      01h
  950.                 AL      00h     PRINT  Get Installed State
  951.                         This call must be defined by all int 2Fh 
  952.                         handlers. It is used by the caller of the 
  953.                         handler to determine if the handler is present. 
  954.                         On entry, AL=0. On return, AL contains the 
  955.                         installed state as follows: 
  956.                 return  AL      0FFh    installed
  957.                                 01h     not installed, not OK to install
  958.                                 00h     not installed, OK to install
  959.  
  960.                         01h     PRINT  Submit File
  961.                         DS:DX   pointer to submit packet
  962.                                 format  byte    level
  963.                                         dword   pointer to ASCIIZ filename
  964.                 return  CF      set if error
  965.                                 AX      error code
  966.                 note 1) A submit packet contains the level (BYTE) and a 
  967.                         pointer to the ASCIIZ string (DWORD in 
  968.                         offset:segment form). The ASCIIZ string must 
  969.                         contain the drive, path, and filename of the 
  970.                         file you want to print. The filename cannot 
  971.                         contain global filename characters. 
  972.                 return  CF      set if error
  973.                                 AX      error code
  974.  
  975.                         02h     PRINT Cancel File
  976.                         On entry, AL=2 and DS:DX points to the ASCIIZ 
  977.                         string for the print file you want to cancel. 
  978.                         Global filename characters are allowed in the 
  979.                         filename. 
  980.                 DS:DX   pointer to ASCIIZ file name to cancel (wildcards 
  981.                         OK) 
  982.                 return  CF      set if error
  983.                                 AX      error code
  984.  
  985.                         03h     PRINT Remove All Files
  986.                 return  CF      set if error
  987.                                 AX      error code
  988.  
  989.                         04h     PRINT Hold Queue/Get Status
  990.                         This call holds the jobs in the print queue so 
  991.                         that you can scan the queue. Issuing any other 
  992.                         code releases the jobs. On entry, AL=4. On 
  993.                         return, DX contains the error count. DS:SI 
  994.                         points to the print queue. The print queue 
  995.                         consists of a series of filename entries. Each 
  996.                         entry is 64 bytes long. The first entry in the 
  997.                         queue is the file currently being printed. The 
  998.                         end of the queue is marked by the entry having a 
  999.                         null as the first character. 
  1000.                return   DX      error count
  1001.                         DS:SI   pointer to print queue (null-string 
  1002.                                 terminated list of 64-byte ASCIIZ 
  1003.                                 filenames) 
  1004.                         CF      set if error
  1005.                                 AX      error code
  1006.                                         01h     function invalid
  1007.                                         02h     file not found
  1008.                                         03h     path not found
  1009.                                         04h     too many open files
  1010.                                         05h     access denied
  1011.                                         08h     queue full
  1012.                                         09h     spooler busy
  1013.                                         0Ch     name too long
  1014.                                         0Fh     drive invalid
  1015.  
  1016.                         05h     PRINT release print jobs
  1017.                 return  none
  1018.                 note 1) This call has no parameters.
  1019.                      2) Restarts the print queue.  This call must be 
  1020.                         called to restart the current print job or after 
  1021.                         calling function 04h to pause the print job. 
  1022.  
  1023.                         06h     PRINT get printer device (DOS 3.3+)
  1024.                 return  CF      clear   OK
  1025.                                 AX      0000h
  1026.                         CF      set
  1027.                                 AX      0008h   (ERROR_QUEUE_FULL)
  1028.                                 DS:SI   pointer to printer device header 
  1029.                                         struc.
  1030.                 note 1) This call has no parameters.
  1031.                      2) 
  1032.  
  1033.  
  1034. Function  02h   PC LAN Program
  1035. entry   AH      02h
  1036. other parameters unknown
  1037.  
  1038.  
  1039. Function  05h   DOS 3.0+ Critical Error Handler
  1040. entry   AH      05h
  1041.         AL      00h     Installation Check
  1042.                 return  AL      00h     not installed, OK to install
  1043.                                 01h     not installed, not OK to install
  1044.                                 0FFh    installed
  1045.                 note    This set of functions allows a user program to
  1046.                         partially or completely override the default
  1047.                         critical error handler in COMMAND.COM.
  1048.         AL      xxh     Handle Error - nonzero error code in AL
  1049.                         (xxh indicates nonzero extended error code)
  1050.                 return  CF      clear
  1051.                         ES:DI   pointer to ASCIIZ error message
  1052.                         AL      (?)
  1053.                         CF      set     use default error handler
  1054. for LANtastic LANOS:
  1055. entry   AH      05h
  1056.         AL      00h     for installation check
  1057.                 #       for error code (in pre DOS 4.00)
  1058.                 1 or 2  for error code in DOS 4.00
  1059.         BX      in      Error code
  1060. return  CF      clear   if error code converted to text
  1061.                 set     if error code can't be converted
  1062.         ES:DI   pointer to ASCIIZ text buffer containing error text. 
  1063.                 This is a read-only text buffer and you must not alter 
  1064.                 the text in this buffer. 
  1065.  
  1066.  
  1067. Function  06h   ASSIGN
  1068. entry   AH      06h
  1069.         AL      00h     Installation Check
  1070.                 01h     Get Memory Segment
  1071. return (AH=00h) AL      (to 4.01) nonzero if ASSIGN is installed
  1072.                         (5.0)      0FFh if ASSIGN is installed
  1073.        (AH=01h) ES      segment of ASSIGN work area
  1074. note 1) Many references report the return value in AH, but this call 
  1075.         appears to return its information in AL. 
  1076.      2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition) 
  1077.         documents int 2Fh, AX=2000 to check for ASSIGN, but according 
  1078.         to Ray Duncan (the author) this is a typo. 
  1079.  
  1080.  
  1081. Function   08h  DRIVER.SYS
  1082. entry   AH      08h
  1083.         AL      00h     Installation Check
  1084.                 return  AL      00h     not installed, OK to install
  1085.                                 01h     not installed, not OK to install
  1086.                                 0FFh    installed
  1087.                 01h     Add New Block Device
  1088.                         DS:DI   pointer to device driver header
  1089.                 note    Moves down list of drivers, copying and 
  1090.                         modifying word at offset 29h.  Device driver 
  1091.                         appended to driver chain. 
  1092.                 02h     Execute Device Driver Request
  1093.                         ES:BX   pointer to device driver request header
  1094.                 return  Request header updated as per requested 
  1095.                         operation. 
  1096.  
  1097.  
  1098. Function   10h  SHARE                                   (DOS 3.0+)
  1099. entry   AH      10h
  1100.         AL      00h     Installation Check
  1101. return  AL      00h     not installed, OK to install
  1102.                 01h     not installed, not OK to install
  1103.                 0FFh    installed
  1104. note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into 
  1105.         an infinite loop. 
  1106.      2) PC-MOS/386 will always report SHARE.EXE as being present, as 
  1107.         its functions are duplicated within the PC-MOS/386 kernel. 
  1108.      3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or 
  1109.         AUTOEXEC file, it can't access the NUL device if 4DOS 3.x is 
  1110.         installed.  If SHARE.EXE is in the root, the problem doesn't 
  1111.         usually occur.  It's been reported that 4DOS is not the only 
  1112.         program that has problems with SHARE.EXE and the NUL device, 
  1113.         so it's more likely to be an MS-DOS problem than a 4DOS 
  1114.         problem.  (dgh on BIX) 
  1115.      4) MS Windows intercepts this call and always returns nonzero 
  1116.         regardless of SHARE's presence.  If your program uses file 
  1117.         sharing you should try locking and reading a file and watch 
  1118.         for the error codes returned by int 21h/5Ch. (Lock/Unlock 
  1119.         File) 
  1120.      5) SHARE function is built into DR-DOS 3.4x, but was removed to a 
  1121.         separate TSR module in 5.0 and 6.0. 
  1122.  
  1123.  
  1124. Function   11h  Multiplex - Network Redirection
  1125. note    In DOS 4.0+, the 11xx calls are all in IFSFUNC.EXE, not in the 
  1126.         PC LAN Program redirector. 
  1127.  
  1128. entry   AH      11h
  1129.         AL      00h     Installation Check
  1130.                         return  AL      00h    not installed, OK to 
  1131.                                                install 
  1132.                                         01h    not installed, not OK to 
  1133.                                                install 
  1134.                                         0FFh   installed 
  1135.                 06h     Close Remote File
  1136.                 08h     Read From Remote File
  1137.                 09h     Write to Remote File
  1138.                 0Ah     Lock Region of File
  1139.                         BX      file handle
  1140.                         CX:DX   starting offset
  1141.                         SI      high word of size
  1142.                         stack   word    low word of size
  1143.                         return  CF      set on error
  1144.                                         AL      DOS error code
  1145.                                 stack   unchanged
  1146.                 0Bh     Unlock a File Region
  1147.                         BX      file handle
  1148.                         CX:DX   starting offset
  1149.                         SI      high word of size
  1150.                         stack   word    low word of size
  1151.                         return  CF      set on error
  1152.                                         AL      DOS error code
  1153.                                         stack   unchanged
  1154.                 0Ch     Get Disk Space
  1155.                         return  AL      sectors per cluster
  1156.                                 BX      total clusters
  1157.                                 CX      bytes per sector
  1158.                                 DX      number of available clusters
  1159.                 0Dh     unknown
  1160.                 0Eh     Set Remote File's Attributes
  1161.                 0Fh     Get Remote File's Attributes
  1162.                 10h     unknown
  1163.                 11h     Rename Remote File
  1164.                 12h     unknown
  1165.                 13h     Delete Remote File?
  1166.                 14h     unknown
  1167.                 15h     unknown
  1168.                 16h     Open Existing Remote File?
  1169.                 17h     unknown
  1170.                 18h     unknown
  1171.                 19h     CHDIR?
  1172.                 1Ah     unknown
  1173.                 1Bh     Find First?
  1174.                 1Ch     Find Next?
  1175.                 1Dh     Close All Remote Files for Process?
  1176.                 1Eh     Do Redirection
  1177.                         stack   word    function to execute
  1178.                                 5F02h   get redirection list entry
  1179.                                         BX      redirection list index 
  1180.                                         DS:SI   pointer to 16-byte local 
  1181.                                                 device name buffer 
  1182.                                         ES:DI   pointer to 128-byte 
  1183.                                                 network name buffer 
  1184.                                 5F03h   redirect device
  1185.                                         BL      device type (see 
  1186.                                                 21h/5F03h) 
  1187.                                         CX      stored parameter value 
  1188.                                         DS:SI   pointer to ASCIIZ source 
  1189.                                                 device name 
  1190.                                         ES:DI   pointer to destination 
  1191.                                                 ASCIIZ network path + 
  1192.                                                 ASCIIZ password 
  1193.                                 5F04h   cancel redirection
  1194.                                         DS:SI   pointer to ASCIIZ device 
  1195.                                                 name or network path 
  1196.                         return  CF      set on error
  1197.                 1Fh     Printer Setup
  1198.                         stack   word    function
  1199.                                 5E02h   set printer setup
  1200.                                 5E03h   get printer setup
  1201.                         return  CF      set on error
  1202.                 20h     Reset Disks and Flush Buffers?
  1203.                 21h     Seek on Remote File?
  1204.                         return  CF      set     on error
  1205.                                         clear   if successful
  1206.                                 DX:AX   new file position?
  1207.                 22h     Process Termination Hook?
  1208.                 23h-26h unknown
  1209.  
  1210.  
  1211. Function   12h  Multiplex, DOS 3.0+ Internal Services
  1212.  
  1213.  
  1214. Function   13h  DOS 3.3+(?) Monitor Int 19h
  1215. entry   AH      13h
  1216.         DS:DX   pointer to the int13h vector to be restored when doing 
  1217.                 an int19h call 
  1218.         ES:BX   pointer to the int13h vector to be used when DOS 
  1219.                 passes the int13h call along 
  1220. return  DS:DX   the original int13h vector used by int19h 
  1221.         ES:BX   the original int13h vector to which DOS passed the 
  1222.                 calls along 
  1223. note    Usually, the original vectors will be the same thing, either 
  1224.         F000:EC59 for floppy disk systems, or maybe F000:A343 for hard 
  1225.         disk systems, but these guys could vary, especially if you're 
  1226.         using a non-standard controller. 
  1227.  
  1228.  
  1229. Function   14h  NLSFUNC.COM
  1230. entry   AH      14h
  1231.         AL      00h     installation check
  1232.                 return  AL      00h     not installed, OK to install
  1233.                                 01h     not installed, not OK to install
  1234.                                 0FFh    installed
  1235.                 01h     unknown
  1236.                 note    Calls int 2Fh/1227h under certain circumstances.
  1237.                 02h     unknown
  1238.                 note    Calls int 2Fh/1227h under certain circumstances.
  1239.                 03h     unknown
  1240.                 note    In DOS 3.3, appears to be identical to
  1241.                         subfunction 01h.
  1242. other parameters unknown
  1243.  
  1244.  
  1245. Function   15h  CD-ROM extensions
  1246.                 Microsoft CD-ROM driver versions 1.0 through 2.0 will 
  1247.                 work only up to DOS 3.31.  DOS 4.0 and up require 2.1 
  1248.                 drivers. MSCDEX abandons INT 13; and redirection 
  1249.                 within DOS to do its work. Some LAN software, such as 
  1250.                 LANtastic, uses the same mechanism to implement 
  1251.                 network drives.  MSCDEX provides IFS functionality in 
  1252.                 any version of DOS back to 3.0. 
  1253.  
  1254. entry   AH      15h     CD-ROM services
  1255.         AL      subfunctions
  1256.                 00h     Get Number of CD-ROM Drives (Installation Check)
  1257.                 BX      00h
  1258.                 return  BX      number of CD-ROM drive letters used
  1259.                                 0000h   MSCDEX not installed
  1260.                         CX      starting drive letter (0=A:, 1=B:, etc)
  1261.                 note    This installation check does not follow the 
  1262.                         format used by other software. 
  1263.  
  1264.                 01h     Get Drive Device List
  1265.                 ES:BX   pointer to buffer to hold drive letter list
  1266.                         (5 bytes per drive letter)
  1267.                 return  buffer filled, for each drive letter:
  1268.                         byte    subunit number in driver
  1269.                         dword   address of device driver header
  1270.  
  1271.                 02h     Get Copyright File Name
  1272.                 CX      drive number (0=A:)
  1273.                 ES:BX   pointer to 38-byte buffer for name of copyright 
  1274.                         file 
  1275.                 return  CF      set if drive is not a CD-ROM drive
  1276.                                 AX      error code  (15h)
  1277.  
  1278.                 03h     Get Abstract File Name
  1279.                 ES:BX   pointer to 38-byte buffer for name of abstract
  1280.                         file
  1281.                 CX      drive number (0=A:)
  1282.                 return  CF      set if drive is not a CD-ROM drive
  1283.                                 AX      error code  (15h)
  1284.  
  1285.                 04h     Get Bibliographic Doc File Name
  1286.                 CX      drive number (0=A:)
  1287.                 ES:BX   pointer to 38-byte buffer for name of
  1288.                         bibliographic documentation file
  1289.                 return  CF      set if drive is not a CD-ROM drive
  1290.                                 AX      error code  (15h)
  1291.  
  1292.                 05h     Read VTOC (Volume Table of Contents)
  1293.                 CX      drive number (0=A:)
  1294.                 DX      sector index (0=first volume descriptor, 
  1295.                         1=second,...) 
  1296.                 ES:BX   pointer to 2048-byte buffer
  1297.                 return  CF      set on error
  1298.                                 AX      error code (15h, 21h)
  1299.                         CF      clear if successful
  1300.                                 AX      volume descriptor type
  1301.                                         00h     other
  1302.                                         01h     standard
  1303.                                         0FFh    terminator
  1304.  
  1305.                 06h     Turn Debugging On
  1306.                 BX      debugging function to enable
  1307.                 note    Reserved for development.
  1308.  
  1309.                 07h     Turn Debugging Off
  1310.                 BX      debugging function to disable
  1311.                 note    Reserved for development.
  1312.  
  1313.                 08h     Absolute Disk Read
  1314.                 CX      drive number (0=A:)
  1315.                 DX      number of sectors to read
  1316.                 ES:BX   pointer to buffer
  1317.                 SI:DI   starting sector number
  1318.                 return  CF      set on error
  1319.                                 AL      error code  (15h, 21h)
  1320.  
  1321.                 09h     Absolute Disk Write
  1322.                 CX      drive number (0=A:)
  1323.                 DX      number of sectors to write
  1324.                 ES:BX   pointer to buffer
  1325.                 SI:DI   starting sector number
  1326.                 note    Corresponds to int 26h and is currently reserved 
  1327.                         and nonfunctional. 
  1328.  
  1329.                 0Ah     Reserved by Microsoft
  1330.  
  1331.                 0Bh     CD-ROM 2.00 - Drive Check
  1332.                 CX      drive number (0=A:)
  1333.                 return  BX      0ADADh if MSCDEX.EXE installed
  1334.                         AX      0000h   if drive not supported
  1335.                                 <>0     if supported
  1336.  
  1337.                 0Ch     CD-ROM 2.00 - Get MSCDEX.EXE Version
  1338.                 return  BH      major version
  1339.                         BL      minor version
  1340.                 note    MSCDEX.EXE versions prior to 1.02 return BX=0.
  1341.  
  1342.                 0Dh     CD-ROM 2.00 - Get CD-ROM Drive Letters
  1343.                 ES:BX   pointer to buffer for drive letter list
  1344.                         (1 byte per drive)
  1345.                 return  Buffer filled with drive numbers (0=A:). Each 
  1346.                         byte corresponds to the drive in the same 
  1347.                         position for function 1501h. 
  1348.  
  1349.                 0Eh     CDROM 2.00 - Get/Set Volume Descriptor 
  1350.                         Preference 
  1351.                 BX      subfunction
  1352.                         00h     Get Preference
  1353.                         DX      0000h
  1354.                         return  DX      preference settings
  1355.                         01h     Set Preference
  1356.                         DH      volume descriptor preference
  1357.                                 01h     primary volume descriptor
  1358.                                 02h     supplementary volume descriptor
  1359.                         DL      Supplementary Volume Descriptor
  1360.                                 Preference
  1361.                                 01h     shift-Kanji
  1362.                         CX      drive number (0=A:)
  1363.                         return  CF      set on error
  1364.                                         AX      error code  (01h, 15h)
  1365.  
  1366.                 0Fh     CD-ROM 2.00 - Get Directory Entry
  1367.                 CX      drive number (0=A:)
  1368.                 ES:BX   pointer to ASCIIZ pathname
  1369.                 SI:DI   pointer to 255-byte buffer for directory entry
  1370.                 return  CF      set on error
  1371.                                 AX      error code
  1372.                         CF      clear if succesful
  1373.                                 AX      disk format (0=High Sierra,
  1374.                                                      1=ISO 9660)
  1375.                 note    Directory entry format:
  1376.                         byte    length of directory entry
  1377.                         byte    length of XAR in LBN's
  1378.                         dword   LBN of data, Intel (little-Endian) format
  1379.                         dword   LBN of data, Motorola (big-Endian) format
  1380.                         dword   length of file, Intel format
  1381.                         dword   length of file, Motorola format
  1382.                ---High Sierra---
  1383.                       6 bytes   date and time
  1384.                         byte    bit flags
  1385.                         byte    reserved
  1386.                ---ISO 9660---
  1387.                       7 bytes   data and time
  1388.                         byte    bit flags
  1389.                ---both formats---
  1390.                         byte    interleave size
  1391.                         byte    interleave skip factor
  1392.                         word    volume set sequence number, Intel format
  1393.                         word    volume set sequence number, Motorola
  1394.                                 format
  1395.                         byte    length of file name
  1396.                       n bytes   file name
  1397.                         byte    (optional) padding if filename is odd
  1398.                                 length
  1399.                       n bytes   system data
  1400.  
  1401.                 Error codes:
  1402.                         01h     invalid function
  1403.                         15h     invalid drive
  1404.                         21h     not ready
  1405.  
  1406.  
  1407. Function   16h  MS-DOS Idle Call  (DOS 5.0+, OS/2 2.0, Windows 3.0+)
  1408. entry   AH      16h     idle call
  1409.         AL      80h     
  1410. return  AL      00h     idle call is supported
  1411.                 nonzero idle call is not supported
  1412. note 1) When your program is waiting for user input or otherwise not 
  1413.         doing useful work, you can call this function in a loop.  
  1414.         Properly written background programs can monitor this call to 
  1415.         determine if it is safe to do processing.  This call 
  1416.         originated in Windows 3.0, then the OS/2 2.0 DOS box, and 
  1417.         finally in DOS 5, where DOSSHELL uses it so processes can tell 
  1418.         the shell when it is safe to swap tasks.  It's also used by 
  1419.         the Microsoft Laptop Power Management API.
  1420.      2) The MS 5.0 Technical Reference recommends making sure the int 
  1421.         2Fh vector is nonzero before calling this function.  This 
  1422.         would be to ensure you are running a DOS version that has 2Fh 
  1423.         support. 
  1424.      3) This call is nonblocking, that is, the system does not suspend 
  1425.         the program unless another program is ready to run.  Usually 
  1426.         the call returns immediately and the program continues 
  1427.         running. 
  1428.      4) Windows apps should NOT issue this interrupt.
  1429.  
  1430.  
  1431. Function   17h  MS Windows Clipboard API                            (3.0+)
  1432. no registers known
  1433. note    This is the interface to the Clipboard.  You can open the 
  1434.         Clipboard, determine the size of the data in the Clipboard, 
  1435.         read the Clipboard, write the Clipboard, clear the Clipboard, 
  1436.         and close the Clipboard. 
  1437.  
  1438.  
  1439. Function   19h  SHELLB.COM  (DOS 4.0+)
  1440. entry   AH      00h     SHELLB.COM - Installation Check
  1441.                 return  AL      00h     not installed
  1442.                         0FFh    installed
  1443.                 01h     SHELLC.EXE Interface
  1444.                         BL      00h     if SHELLC transient
  1445.                                 01h     if SHELLC resident
  1446.                         DS:DX   pointer to far call entry point for
  1447.                                 resident SHELLC.EXE
  1448.                 return  ES:DI   ptr to SHELLC.EXE workspace within
  1449.                                 SHELLB.COM
  1450.                 note    SHELLB.COM and SHELLC.EXE are parts of the DOS
  1451.                         4.x shell
  1452.                 02h     SHELLB.COM - COMMAND.COM Interface
  1453.                         ES:DI   pointer to ASCIIZ full filename of 
  1454.                                 current batch file, with at least the 
  1455.                                 final filename element uppercased 
  1456.                         DS:DX   pointer to buffer for results
  1457.                 return  AL      00h     failed, either
  1458.                                         (a) final filename element 
  1459.                                             quoted at ES:DI does not 
  1460.                                             match identity of shell 
  1461.                                             batch file quoted as parm of 
  1462.                                             most recent call of SHELLB 
  1463.                                             command, 
  1464.                                         or
  1465.                                         (b) no more Program Start 
  1466.                                             Commands 
  1467.                                              available. 
  1468.                                 0FFh    success, then:
  1469.                                         memory at DS:[DX+1] onwards 
  1470.                                         filled as: 
  1471.                                         DX+1:   byte  count of bytes of 
  1472.                                                       PSC 
  1473.                                         DX+2: n bytes Program Start 
  1474.                                                       Command text 
  1475.                                         byte    0Dh   terminator 
  1476.                 note    COMMAND.COM executes the result of this call 
  1477.                         in preference to reading a command from a 
  1478.                         batch file. Thus the batch file does not 
  1479.                         advance in execution for so long as SHELLB 
  1480.                         provides PSCs from its workspace. The PSCs are 
  1481.                         planted in SHELLB workspace by SHELLC, the 
  1482.                         user menu interface. The final PSC of a 
  1483.                         sequence is finished with a GOTO COMMON, which 
  1484.                         causes a loop back in the batch file which 
  1485.                         called SHELLC so as to execute SHELLC again. 
  1486.                         The check on batch file name permits PSCs to 
  1487.                         CALL nested batch files while PSCs are still 
  1488.                         stacked up for subsequent execution. 
  1489.                 03h     SHELLB.COM - COMMAND.COM Interface
  1490.                         ES:DI   pointer to ASCIIZ batch file name as
  1491.                                 for fn 02h
  1492.                 return  AL      00h     quoted batch files does not 
  1493.                                         match last SHELLB parameter 
  1494.                                 0FFh    quoted batch file name matches 
  1495.                                         last SHELLB parameter 
  1496.                 04h     SHELLB.COM - SHELLB.COM transient to TSR
  1497.                         interface
  1498.                 return  ES:DI   pointer to name of current shell batch
  1499.                                 file:
  1500.                                 word    number of bytes of name 
  1501.                                         following 
  1502.                                 bytes   (8 max) uppercase name of 
  1503.                                         shell batch file 
  1504.  
  1505.  
  1506. Function   1Ah  ANSI.SYS   (DOS 4.0+)
  1507. entry   AH      00h     Installation Check
  1508.                 return  AL      00h     not installed
  1509.                                 0FFh    if installed
  1510.                 01h     Get/Set Display Information
  1511.                         CL      5Fh     set information
  1512.                                 7Fh     get information
  1513.                                 DS:DX   pointer to parameter block as
  1514.                                         for int 21h, AX=440Ch, CX=037Fh/
  1515.                                         035Fh respectively
  1516.                 return  CF      set     on error
  1517.                                         AX      error code (unknown)
  1518.                                 clear   if successful
  1519.                 note 1) AX is destroyed.
  1520.                      2) May be the DOS IOCTL interface to ANSI.SYS.
  1521.  
  1522.  
  1523. Function   1Bh  XMA2EMS.SYS   (DOS 4.0+)
  1524. entry   AH      00h     Installation Check
  1525.                 return  AL      0FFh    if installed
  1526.                 01h     Get Hidden Frame Information
  1527.                         DI      hidden physical page number
  1528.                 return  AX      0000h if successful
  1529.                                         ES      segment of page frame
  1530.                                         DI      physical page number
  1531.                                 0FFFFh if failed (no such hidden page)
  1532. note 1) XMA2EMS.SYS extension is only installed if DOS has page frames 
  1533.         to hide.  This extension hooks onto int 67h fn 58h and returns 
  1534.         from that call data which excludes the physical pages being 
  1535.         used by DOS. 
  1536.      2) Function 02h corresponds to the data edited out of the int 
  1537.         67h/fn 58h call. 
  1538.  
  1539.  
  1540. Function  43h   Microsoft Extended Memory Specification (XMS)
  1541.                 The XMS version 2.00 for MS-DOS allows DOS programs
  1542.                 to utilize additional memory found in 80286 and 80386
  1543.                 machines.  With some restrictions, XMS adds about 64K
  1544.                 to the 640K which DOS programs can access directly.
  1545.                 XMS also provides DOS programs with a standard method
  1546.                 for storing data in extended memory.
  1547.                 See Chapter 10 for API.
  1548.  
  1549.  
  1550. Function  48h   DOSKEY.COM (DOS 5.0+)
  1551. entry   AH      48h     DOSKEY.COM
  1552.         AL      00h     Get Installed State
  1553. return  AL      00h     not installed
  1554.                 0FFh    installed
  1555.  
  1556.         AL      10h     Read Command Line
  1557.                 DS:DX   pointer to buffer to take the command line
  1558.                         buffer:
  1559.                         offset  description
  1560.                         00h     buffer size (max 128 bytes)
  1561.                         01h     the number of characters, minus 1.  The
  1562.                                 final CR is copied to the buffer but
  1563.                                 not included in the byte count.
  1564.                         02h     the first byte of the input line.
  1565. return  AX      0000h
  1566.                 DS:DX   filled with command line
  1567. note    AX=0 if the user types a macro name, and the buffer is not
  1568.         filled.  Your program must call the function a second time to
  1569.         expand the macro and copy the macro text to the buffer.
  1570.  
  1571.  
  1572. Function  4Ah   DOS 5.0 HMA Services (undocumented)
  1573. entry   AH      4Ah
  1574.         AL      01h     Get Size
  1575. return  BX      number of bytes (possibly 0) of available HMA
  1576.         ES:DI   start of the available HMA
  1577.  
  1578.  
  1579. Function  4Bh   Microsoft Task Switcher API (DOS 5.0+)
  1580. entry   AH      4Bh
  1581.  
  1582. entry   AL      01h     Build_Callout_Chain
  1583.         ES:BX   0:0
  1584.         CX:DX   switcher call-in address
  1585. return  ES:BX   address of the app's Switch_Call_Back_Info data
  1586.                 structure
  1587. note    All other registers must be preserved.
  1588.  
  1589. entry   AL      02h     Detect Switcher
  1590.  
  1591. entry   AL      03h     Allocate Switcher ID
  1592.  
  1593. entry   AL      04h     Free Switcher ID
  1594.  
  1595. entry   AL      05h     Identify Instance Data
  1596.  
  1597.  
  1598.  
  1599.  
  1600. Function  64h   SCRNSAV2
  1601. entry   AH      64h
  1602.         AL      00h     installation check
  1603. return  AL      00h     not installed
  1604.                 0FFh    installed
  1605. note    SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan
  1606.         Ballard.
  1607.  
  1608.  
  1609. Function  7Ah   Novell NetWare
  1610. entry   AH      7Ah
  1611.         AL      00h     installation check
  1612. return  AL      00h     not installed
  1613.                 0FFh    installed
  1614.         ES:DI   pointer to FAR entry point for routines otherwise
  1615.                 accessed through int 21h
  1616. note 1) Returns address of entry point for IPX and SPX.
  1617.      2) Parameters are listed in Chapter 13.
  1618.  
  1619.  
  1620.  
  1621. Function  87h   APPEND
  1622. entry   AH      87h
  1623.         AL      00h     APPEND installation check
  1624.                 return  AH <> 0 if installed
  1625.                 01h     APPEND - unknown
  1626.                 02h     APPEND - version check
  1627. return  unknown
  1628.  
  1629.  
  1630. Function  88h   Microsoft Networks
  1631. entry   AH      88h
  1632.         AL      00h     network program installation check
  1633.                 return  AH <> 0 if installed
  1634.                         BX      installed component flags
  1635.                                 (test in this order!)
  1636.                            bits 2       messenger
  1637.                                 3       redirector
  1638.                                 6       server
  1639.                                 7       receiver
  1640.                                 other bits not used, do not test
  1641.                 01h     unknown
  1642.                 02h     unknown
  1643.                 03h     get current POST address
  1644.                         return  ES:BX   POST address
  1645.                 04h     set new POST address
  1646.                         ES:BX   new POST address
  1647.                 09h     network version check
  1648.  
  1649.  
  1650. Function  89h   WHOA!           (slows system down for games)
  1651. entry   AH      89h
  1652.         AL      00h     installation check
  1653.                 return  AL      00h     not installed
  1654.                                 0FFh    installed
  1655.                 01h     uninstall
  1656.                 return  AL      0FDh    successful
  1657.                                 0FEh    error
  1658.                 02h     set delay count
  1659.                 BX = delay count (larger values slow system down more)
  1660.                 return  AL      0FDh    successful
  1661.                                 0FEh    error
  1662. note    WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
  1663.  
  1664.  
  1665. Function  0AAh  VIDCLOCK.COM
  1666. entry   AH      0AAh
  1667.         AL      00h     installation check
  1668. return  AL      00h     not installed
  1669.                 0FFh    installed
  1670. note    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
  1671.  
  1672.  
  1673. Function  0ADh  KEYB.COM                                     (DOS 3.3+)
  1674. entry   AH      0ADh
  1675.         AL      80h     Get KEYB.COM Version Number
  1676. return
  1677.         BX      00h     not installed
  1678.                 nonzero installed
  1679.                         BH      major version number
  1680.                         BL      minor version number
  1681. ---
  1682.         AL      81h     Set KEYB.COM Active Code Page
  1683.         BX      code page ID
  1684.                 437     USA
  1685.                 850     Multilingual (Latin I)
  1686.                 852     Multilingual (Latin II)
  1687.                 860     Portuguese
  1688.                 863     French-Canadian
  1689.                 865     Nordic
  1690. return  CF      clear   successful
  1691.                 set
  1692.                 AX      0001h   if code page is not valid
  1693. ---
  1694.         AL      82h     Set KEYB.COM Country Flag
  1695.         BL      00h     domestic (USA) keyboard
  1696.                 0FFh    not USA keyboard
  1697. return  CF      clear   successful
  1698.                 set     invalid value was passed in BL
  1699. ---
  1700.         AL      83h     Get KEYB.COM Country Flag
  1701. return  BL      current country flag value (should be 00h or 0FFh)
  1702.  
  1703. note    Some of these functions are available in DOS 3.3 and 4.0, but
  1704.         were not documented.  These descriptions are for DOS 5.0.
  1705.  
  1706.  
  1707. Function  0AEh  DOS Installable Command                      (DOS 3.3+)
  1708. entry   AH      0AEh
  1709.         AL      00h     installation check
  1710.                 DX      0FFFFh
  1711.                 DS:BX   pointer to command line
  1712.                 return  AL      00h     execute command normally
  1713.                                 0FFh    command is TSR extension to
  1714.                                         COMMAND.COM
  1715.                 01h     execute installed command
  1716.                 DX      0FFFFh
  1717.                 DS:SI   pointer to ?
  1718.                 return  DS:SI   unknown
  1719. note 1) This apparently provides a mechanism for TSRs to install
  1720.         permanent extensions to COMMAND.COM.  It seems that
  1721.         COMMAND.COM makes this call before executing the current
  1722.         command line, and does not execute the command itself if the
  1723.         return is 0FFh.
  1724.      2) Fn 01h apparently requests execution of a previous command
  1725.         which a call to fn 01h indicated was resident.
  1726.      3) Format of command line:
  1727.         offset  size    description
  1728.         00h     byte    max length of command line?
  1729.         01h     byte    count of bytes to follow
  1730.         03h   n bytes   command line text, terminated by 0Dh
  1731.  
  1732.  
  1733. Function  0B0h  GRAFTABL.COM                                 (DOS 3.3+)
  1734. entry   AH      0B0h
  1735.         AL      00h     installation check
  1736.         return  AL      00h     not installed, OK to install
  1737.                         0FFh    installed
  1738. note 1) Also used by DISPLAY.SYS.
  1739.  
  1740.                                               
  1741. Function  0B7h  APPEND.EXE                                   (DOS 3.3+)
  1742. entry   AH      0B7h
  1743.         AL      00h     installation check
  1744.                 return  AH      00h     not installed
  1745.                                 nonzero installed (3.3-4.0)
  1746.                                 0FFh    installed (5.0)
  1747.  
  1748.                 01h     unknown
  1749.  
  1750.                 02h     version check
  1751.                 return  AH      minor version number, otherwise
  1752.                         AL      major version number
  1753.                 note    The MS 5.0 TR reports AX should be 0FFFFh for
  1754.                         versions compatible with DOS 5.0.  However,
  1755.                         DOS 4.0 returns the same value.
  1756.  
  1757.                 03h     unknown
  1758.  
  1759.                 04h     get APPEND directory list address    (DOS 4.0+)
  1760.                 return  ES:DI   pointer to active APPEND path (128
  1761.                                 bytes max) in ASCIIZ format
  1762.  
  1763.                 05h     unknown
  1764.  
  1765.                 06h     get APPEND modes flag                (DOS 4.0+)
  1766.                 return  BX      APPEND state
  1767.                            bits 0       set if APPEND enabled 
  1768.                                 1-B     reserved, must be zero 
  1769.                                 C       appends dirs to file requests 
  1770.                                         that already specify a drive 
  1771.                                 D       applies dirs to file requests 
  1772.                                         that already specify a PATH.  
  1773.                                         Set if /PATH flag active 
  1774.                                 E       stores the appended dirs in the 
  1775.                                         APPEND environment variable.  
  1776.                                         Set if /E flag active 
  1777.                                 F       applies dirs to functions like 
  1778.                                         EXEC (21h/4B00h) or FIND FIRST 
  1779.                                         (21h/4Eh). Set if /X flag 
  1780.                                         active. 
  1781.                 note    Returns the current operation modes for APPEND.
  1782.  
  1783.                 07h     set APPEND modes flag                   (DOS 4.0+)
  1784.                         BX      APPEND state bits (see 06h)
  1785.                 return  none
  1786.  
  1787.                 08h     unknown
  1788.                 09h     unknown
  1789.                 0Ah     unknown
  1790.                 10h     unknown
  1791.  
  1792.                 11h     set TRUENAME flag                    (DOS 4.0+)
  1793.                 note 1) This call has no parameters.
  1794.                      2) If the next int 21h call is function 3Dh, 43h, 
  1795.                         4Eh or 6Ch, the fully qualified filename is 
  1796.                         written over top of the filename passed to the 
  1797.                         int 21h call. The application must provide a 
  1798.                         sufficiently large buffer. This state is reset 
  1799.                         after APPEND processes the call. 
  1800.  
  1801. note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh 
  1802.         fn 0B711h before an open (int 21h 3Dh or 6Ch).  The full path 
  1803.         is put in your ASCIIZ string when you do the open, so be sure 
  1804.         it is long enough. 
  1805.      2) The APPEND command apparently covers parts of int 21h/6Ch even 
  1806.         though Microsoft's 4.01 User's Reference says it covers only 
  1807.         0Fh, 23h, 2Dh, 11h, 4Eh & 4Bh, some of those do require 
  1808.         special switches.  For 6Ch, it may be a function of the DX 
  1809.         register.  If DX=xx1x it looks only in the current directory, 
  1810.         if DX=xx0x it will search the full append path.  DX is called 
  1811.         the open flag and gives what action to take if the file exits 
  1812.         or does not exist. 
  1813.  
  1814.  
  1815. Function  0BFh  PC-LAN Network
  1816. entry   AH      0BFh
  1817.         AL      00h     installation check        (REDIREFS.EXE)
  1818.         return  AL      0FFh    if installed
  1819.         AL      80h     set REDIRIFS entry point  (REDIR.SYS)
  1820.                 ES:DI   pointer to FAR entry point to IFS handler in 
  1821.                         REDIRIFS 
  1822.         return  AL      0FFh    if installed
  1823.                 ES:DI   pointer to internal workspace
  1824. note    All future IFS calls to REDIR.SYS are passed to the ES:DI entry
  1825.         point.
  1826.  
  1827.  
  1828. Function  0C7h  Artisoft LANtastic AI-LANBIOS
  1829. note    This is the default entry point for the LANtastic NOS serial 
  1830.         and parallel port drivers. 
  1831.  
  1832.  
  1833. Function 0D44Dh 4DOS v3.01,+ Command Interpreter  (COMMAND.COM replacement)
  1834. entry   AX      0D44Dh  4DOS installation check
  1835. return  If 4DOS is present in memory the following values will be 
  1836.         returned: 
  1837.         AX      44DDh
  1838.         BH      minor 4DOS version number
  1839.         BL      major 4DOS version number (same format as DOS int 
  1840.                 21h/fn 30h) 
  1841.         CX      4DOS PSP segment address
  1842.         DL      4DOS shell number (0 for the first shell, 1 for the 
  1843.                 second, etc.; incremented each time a new copy of 4DOS 
  1844.                 is loaded over a root copy, either in a different 
  1845.                 multitasker window or via nested shells) 
  1846. note 1) (excerpted from 4DOS 3.01 manual) 4DOS now generates two 
  1847.         different INT 2F calls to allow TSRs to tell when 4DOS is back 
  1848.         at the prompt.  These calls have AX = D44Eh.  The first occurs 
  1849.         immediately before displaying the prompt, with BX = 0; the 
  1850.         second occurs after displaying the prompt and immediately 
  1851.         before accepting keyboard input, with BX = 1.  Any routine 
  1852.         intercepting these calls should preserve at least the SI, DI, 
  1853.         BP, SP, DS, ES, and SS registers. 
  1854.      2) This function (440Dh) is only available in swapping mode.  It 
  1855.         tells you if 4DOS is loaded in memory, but not whether it is 
  1856.         the parent process of your program.  You can determine if 4DOS 
  1857.         is the parent process by comparing the PSP value returned in 
  1858.         CX to the PSP chain pointer at offset 16h in your program's 
  1859.         PSP. 
  1860.  
  1861.  
  1862. Function  0E3h  AnarKey    (keyboard command stack and alias program)
  1863. entry   AH      0E3h
  1864.         AL      00h     installation check
  1865.         return  AL      00h     not installed
  1866.                         0FFh    installed
  1867. note    (excerpted from the AnarKey documentation)
  1868.         Upon installation, ANARKEY hooks into two interrupts:
  1869.         1) Interrupt used to install program signature
  1870.                 -DOS versions before 3.1 use one interrupt between 60h-67h
  1871.                 -DOS 3.1 and later use interrupt 2Fh
  1872.         2) Interrupt 21h, function 0Ah
  1873.         Upon initial program execution, a program "signature" is 
  1874.         installed which is used by ANARKEY to prevent itself from 
  1875.         being installed more than once. Depending upon the DOS 
  1876.         version, a different method of signature installation is 
  1877.         performed. 
  1878.          Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h 
  1879.         thru 67h searching for an unused vector (signified by a null 
  1880.         value).  If an unused vector is found, ANARKEY takes it and 
  1881.         installs its program signature there. If all the vectors are 
  1882.         in use, ANARKEY does not install a program signature. 
  1883.          Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh. 
  1884.         By default, ANARKEY appropriates process number 0E3h. 
  1885.  
  1886.  
  1887. Function  0F7h  AUTOPARK.COM  (PD TSR hard disk parking utility)
  1888. entry   AH      0F7h
  1889.         AL      00h     installation check
  1890.                 return  AL      00h     not installed
  1891.                                 0FFh    installed
  1892.         01h     set parking delay
  1893.                 BX:CX   32 bit count of 55ms timer ticks
  1894. note    AUTOPARK is a TSR HD parker by Alan D. Jones.
  1895.  
  1896.  
  1897. Function        Intel Communicating Applications Standard (CAS 1.01A)
  1898. entry   AH              (default; CAS multiplex number can be user-adjusted)
  1899.         AL      00h     Get Installed State
  1900.                         return  AL      00h     not installed
  1901.                                         01h     not installed, not
  1902.                                                 OK to install
  1903.                                         0FFh    installed
  1904.                         note    No errors are returned.
  1905.                 01h     Submit a Task
  1906.                         DS:DX   ptr to ASCIIZ path and name of Task 
  1907.                                 Control File 
  1908.                         return  AX      positive event handle or neg. 
  1909.                                         error code 
  1910.                         note    Files associated with a task must stay 
  1911.                                 in existence until the task is complete 
  1912.                                 or an error will result. 
  1913.                 02h     Abort the Current Event
  1914.                         return  AX      event handle of aborted event or
  1915.                                         negative error code
  1916.                         note    Terminating an event is not 
  1917.                                 instantaneous. It might take up to 30 
  1918.                                 seconds. 
  1919.                 03h     reserved
  1920.                 04h     reserved
  1921.                 05h     Find First Entry in Queue
  1922.                         CX      Status of the event you are seeking. 
  1923.                                 This value is compared with the field 
  1924.                                 at offset 2 of the Control File 
  1925.                                 0 - event has successfully completed
  1926.                                 1 - event is waiting to be processed
  1927.                                 2 - number has been dialed
  1928.                                 3 - connection has been made (sending)
  1929.                                 4 - connection has been made (receiving)
  1930.                                 5 - event was aborted
  1931.                                -1 - chooses an event without regard to 
  1932.                                     status This value will probably be 
  1933.                                     used most often 
  1934.                                 Other negative values match error codes 
  1935.                                 in Control File. 
  1936.                         DH      direction:
  1937.                                 0 - Search forward chronologically 
  1938.                                     (from the first to the last 
  1939.                                     occurring event) 
  1940.                                 1 - Search backward chronologically 
  1941.                                     (from the last to the first 
  1942.                                     occurring event) 
  1943.                         DL      queue to search:
  1944.                                 0 - Find first control file in Task 
  1945.                                     Queue 
  1946.                                 1 - Find first control file in Receive 
  1947.                                     Queue 
  1948.                                 2 - Find first control file in Log 
  1949.                                     Queue 
  1950.                         return  AX      0 if successful, or negative
  1951.                                         error code
  1952.                                 BX      event handle for this file
  1953.                 06h     Find Next Entry in Queue
  1954.                         DL      queue to search:
  1955.                                 0 - Find next control file in Task 
  1956.                                     Queue 
  1957.                                 1 - Find next control file in Receive 
  1958.                                     Queue 
  1959.                                 2 - Find next control file in Log Queue 
  1960.                         return  AX      0 if successful, or negative
  1961.                                         error code
  1962.                                 BX      event handle for this file
  1963.                 07h     Open a File
  1964.                         BX      event handle
  1965.                         CX      receive file number
  1966.                                 0 - the Receive Control File
  1967.                                 1 - first received file
  1968.                                 2 - second received file
  1969.                                 3 - third received file
  1970.                                 n - nth received file
  1971.                         DL      queue:
  1972.                                 0 - open control file in Task Queue 
  1973.                                 1 - open control file in Receive Queue 
  1974.                                     or the received data 
  1975.                  file specified in the CX register.
  1976.                                 2 - Open control file in Log Queue.
  1977.                         return  AX      0 if successful, or negative
  1978.                                         error code
  1979.                                 BX      DOS file handle for the requested
  1980.                                         file
  1981.                 08h     Delete a File
  1982.                         BX      event handle
  1983.                         CX      receive file number
  1984.                                 0 - delete all files associated with a 
  1985.                                     specific Receive Control File 
  1986.                                     (including the RCF) 
  1987.                                 1 - delete first received file 
  1988.                                     associated with the event handle 
  1989.                                 2 - delete the second received file 
  1990.                                     associated with the event handle. 
  1991.                                 n - delete the nth received file 
  1992.                                     associated with the event handle 
  1993.                         DL      queue:
  1994.                                 0 - delete control file in Task Queue 
  1995.                                 1 - delete a file or files associated 
  1996.                                     with an event in the Receive Queue. 
  1997.                                 2 - delete control file in Log Queue 
  1998.                                     note   It is strongly recommended 
  1999.                                     that this function NOT be used to 
  2000.                                     delete individual Log Control Files 
  2001.                                     to maintain the integrity of the 
  2002.                                     log. 
  2003.                         return  AX      0 if successful, or negative
  2004.                                         error code
  2005.                 09h     Delete All Files (in a queue)
  2006.                         DL      queue:
  2007.                                 0 - delete all control files in the 
  2008.                                     Task Queue 
  2009.                                 1 - delete all control files in the 
  2010.                                     Receive Queue and all received 
  2011.                                     files 
  2012.                                 2 - delete all control files in the Log 
  2013.                                     Queue 
  2014.                         return  AX      0 if successful or negative
  2015.                                         error code
  2016.                 0Ah     Get Event Date
  2017.                         BX      event handle of event whose date you 
  2018.                                 want to get 
  2019.                         DL      queue:
  2020.                                 0 - task queue
  2021.                                 1 - receive queue
  2022.                                 2 - log queue
  2023.                         return  AX      0 if successful or negative
  2024.                                         error code
  2025.                                 CX      year  (1980-2099)
  2026.                                 DH      month (1-12)
  2027.                                 DL      day   (1-31)
  2028.                 0Bh     Set Task Date
  2029.                         BX      event handle
  2030.                         CX      year  (1980-2099)
  2031.                         DH      month (1-12)
  2032.                         DL      day   (1-31)
  2033.                         return  AX      0 if successful or negative
  2034.                                         error code
  2035.                 0CH     Get Event Time
  2036.                         BX      event handle
  2037.                         DL      queue:
  2038.                                 0 - task queue
  2039.                                 1 - receive queue
  2040.                                 2 - log queue
  2041.                         return  AX      0 if successful or negative
  2042.                                         error code
  2043.                                 CH      hour    (0-23)
  2044.                                 CL      minutes (0-59)
  2045.                                 DH      seconds (0-59)
  2046.                                 DL      0
  2047.                 0DH     Set Task Time
  2048.                         BX      event handle
  2049.                         CH      hour    (0-23)
  2050.                         CL      minutes (0-59)
  2051.                         DH      seconds (0-59)
  2052.                         DL      unused
  2053.                         return  AX      0 if successful or negative
  2054.                                         error code
  2055.                 0EH     Get External Data Block
  2056.                         DS:DX points to a 256-byte EDB area
  2057.                         return  AX      0 if successful or negative
  2058.                                         error code
  2059.                         note    EDB area is filled with the External 
  2060.                                 Data Block 
  2061.                                 block format: (values in decimal)
  2062.                               Offset Length        Description
  2063.                                  0    1    CAS major version number 
  2064.                                  1    1    CAS minor version number 
  2065.                                  2    68   ASCIIZ path to directory 
  2066.                                            containing Resident Manager 
  2067.                                            and CAS software. The path 
  2068.                                            must end with a backslash 
  2069.                                  70   13   ASCIIZ name of current 
  2070.                                            phonebook (the CAS 
  2071.                                            subdirectory is assumed) 
  2072.                                  83   13   AZCIIZ name of current logo 
  2073.                                            file (the CAS subdirectory is 
  2074.                                            assumed) 
  2075.                                  96   32   ASCIIZ default sender name 
  2076.                                  128  21   ASCIIZ CSID (CCITT fax device 
  2077.                                            ID) 
  2078.                                  149  107  Reserved 
  2079.                 0Fh     Get/Set Autoreceive State
  2080.                         DL      function code:
  2081.                                 0 - get current autoreceive state 
  2082.                                 1 - set current state to value in DH 
  2083.                                 DH      # rings before answer or 0 to
  2084.                                         disable
  2085.                         return  AX      current state or negative error
  2086.                                         code
  2087.                                         0 - Autoreceive disabled
  2088.                                         positive # - # rings before hdw
  2089.                                                      answers
  2090.                 10h     Get Current Event Status
  2091.                         DS:DX   pointer to a 444 byte status area
  2092.                         return  AX      0 if successful or negative
  2093.                                         error code
  2094.                                 BX      number of the current event (AX=0)
  2095.                 11h     Get Queue Status
  2096.                         DL      queue:
  2097.                                 0 - find status of Task Queue
  2098.                                 1 - find status of Receive Queue
  2099.                                 2 - find status of Log Queue
  2100.                         return  AX      # changes to queue since 
  2101.                                         Resident Manager started or 
  2102.                                         negative error code If changes 
  2103.                                         exceeds 7FFFH, the count begins 
  2104.                                         again at 0. 
  2105.                                 BX      current # of Control Files in 
  2106.                                         queue 
  2107.                                 CX      current # of received files 
  2108.                 12h     Get Hardware Status
  2109.                         DS:DX   pointer to a 128-byte status area
  2110.                         return  AX      0 if successful, negative if not
  2111.                         DS:DX   pointer to filled 128-byte status area
  2112.                 13h     Run Diagnostics
  2113.                         DL      Mode
  2114.                                 0 - report progress of diagnostics
  2115.                                 1 - start running diagnostics
  2116.                         return  if DL=1, AX=0 or a negative error code.
  2117.                                 if DL=0, AX=40h or positive number 
  2118.                                 indicating diagnostics passed. A 
  2119.                                 negative value indicates failure and 
  2120.                                 contains the error code 
  2121.                 14h     Move Received File
  2122.                         BX      event handle
  2123.                         CX      receive file number
  2124.                                 (must be nonzero to specify a received 
  2125.                                 file) 
  2126.                                 1 - first received file
  2127.                                 2 - second received file
  2128.                                 3 - third received file
  2129.                                 n - nth received file
  2130.                         DS:DX   pointer to new ASCIIZ pathname and 
  2131.                                 filename.  This file must not exist 
  2132.                                 already 
  2133.                         return  AX      0 if successful or negative
  2134.                                         error code
  2135.                         note    The path to the new directory must 
  2136.                                 exist.  This function cannot create 
  2137.                                 directories. 
  2138.                 15h     Submit a Single File to Send
  2139.                         DS:DX   pointer to variable-length data area
  2140.                         return  AX      positive event handle or 
  2141.                                         negative error code
  2142.                         note 1) variable-length data area format:
  2143.                              Offset Length    Description
  2144.                                 0    1    Transfer type:
  2145.                                           0 - 200x200 dpi, facsimile mode
  2146.                                           1 - 100x200 dpi, facsimile mode
  2147.                                           2 - file transfer mode
  2148.                                           3-127 - Reserved.
  2149.                                 1    1    Text size (if ASCII file, fax
  2150.                                           mode)
  2151.                                           0 - 80-column
  2152.                                           1 - 132-column
  2153.                                           2-127 - reserved
  2154.                                 2    2    time to send, in DOS file time 
  2155.                                           format 
  2156.                                 4    2    date to send, in DOS file time 
  2157.                                           format note: Setting both the 
  2158.                                           time and date fields to 0 
  2159.                                           schedules the file to be sent 
  2160.                                           immediately 
  2161.                                 6    32   ASCIIZ Destination Name  (To: 
  2162.                                           field) 
  2163.                                 38   80   ASCIIZ pathname of the file to 
  2164.                                           send 
  2165.                                 118  47   ASCIIZ phone number to call 
  2166.                                 165  64   ASCIIZ application-specific 
  2167.                                           tag field 
  2168.                                 229  1    reserved; set to zero
  2169.                                 230  1    cover page flag:
  2170.                                           0 - don't send cover page
  2171.                                           1 - send cover page
  2172.                                           2-127 - Reserved
  2173.                                 231  23   reserved; set to zero
  2174.                                 254  var  ASCIIZ cover text (if offset
  2175.                                           230=1)
  2176.                              2) The individual fields have the same 
  2177.                                 meaning as in a Task Control File 
  2178.                              3) You must set all fields, except for the 
  2179.                                 Appli-cation-Specific Tag field, before 
  2180.                                 calling this function. However, you can 
  2181.                                 set the Destination Name and Cover Text 
  2182.                                 fields to an empty string 
  2183.                 16h-80h Reserved by Intel for future expansion
  2184.  
  2185.  
  2186.  
  2187. DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
  2188. return  AX      Error
  2189.                 Codes       Description
  2190.                 01h     invalid function number
  2191.                 02h     file not found
  2192.                 03h     path not found
  2193.                 04h     too many open files
  2194.                 05h     access denied
  2195.                 06h     invalid handle
  2196.                 08h     queue full
  2197.                 09h     busy
  2198.                 0Ch     name too long
  2199.                 0Fh     invalid drive was specified
  2200.         CF      clear (0) if OK
  2201.                 set   (1) if error - error returned in AX
  2202. note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for 
  2203.         DOS. Applications should use multiplex numbers 80h through 
  2204.         0FFh. 
  2205.      2) When in the chain for int 2Fh, if your code calls DOS or if 
  2206.         you execute with interrupts enabled, your code must be 
  2207.         reentrant or recursive. 
  2208.      3) Important!  In versions of DOS prior to 3.0, the int 2Fh 
  2209.         vector was initialized to zero rather than being pointed into 
  2210.         the DOS service area.  You must initialize this vector 
  2211.         manually under DOS 2.x. 
  2212.  
  2213.  
  2214.  
  2215. ┌─────────────────────────────────────────────────────────────────────┐
  2216. │ Miscellaneous Interrupts - in numeric order                         │
  2217. └─────────────────────────────────────────────────────────────────────┘
  2218.  
  2219.  
  2220. ┌─────────────────────────────────────────────────────────────────────┐
  2221. │Interrupt 30h   FAR jump instruction for CP/M-style calls ..... 5**15│
  2222. └─────────────────────────────────────────────────────────────────────┘
  2223. note 1) The CALL 5 entry point does a FAR jump to here  (not a vector!)
  2224.      2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
  2225.  
  2226.  
  2227. ┌─────────────────────────────────────────────────────────────────────┐
  2228. │Interrupt 31h   Unknown ....................................... 5**16│
  2229. └─────────────────────────────────────────────────────────────────────┘
  2230. note    PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
  2231.  
  2232.  
  2233. ┌─────────────────────────────────────────────────────────────────────┐
  2234. │Interrupt 32h   Unknown ....................................... 5**17│
  2235. └─────────────────────────────────────────────────────────────────────┘
  2236.  
  2237.  
  2238. ┌─────────────────────────────────────────────────────────────────────┐
  2239. │Interrupt 33h   Used by Microsoft Mouse Driver Function Calls . 5**18│
  2240. └─────────────────────────────────────────────────────────────────────┘
  2241. note    See Chapter 14 for mouse programming.
  2242.  
  2243.  
  2244. ┌─────────────────────────────────────────────────────────────────────┐
  2245. │Interrupt 34h   Turbo/Microsoft langs - Floating Point emul. .. 5**19│
  2246. └─────────────────────────────────────────────────────────────────────┘
  2247. note    This interrupt emulates opcode 0D8h.
  2248.  
  2249.  
  2250. ┌─────────────────────────────────────────────────────────────────────┐
  2251. │Interrupt 35h   Turbo/Microsoft langs - Floating Point emul. .. 5**20│
  2252. └─────────────────────────────────────────────────────────────────────┘
  2253. note    This interrupt emulates opcode 0D9h.
  2254.  
  2255.  
  2256. ┌─────────────────────────────────────────────────────────────────────┐
  2257. │Interrupt 36h   Turbo/Microsoft langs - Floating Point emul. .. 5**21│
  2258. └─────────────────────────────────────────────────────────────────────┘
  2259. note    This interrupt emulates opcode 0DAh.
  2260.  
  2261.  
  2262. ┌─────────────────────────────────────────────────────────────────────┐
  2263. │Interrupt 37h   Turbo/Microsoft langs - Floating Point emul. .. 5**22│
  2264. └─────────────────────────────────────────────────────────────────────┘
  2265. note    This interrupt emulates opcode 0DBh.
  2266.  
  2267.  
  2268. ┌─────────────────────────────────────────────────────────────────────┐
  2269. │Interrupt 38h   Turbo/Microsoft langs - Floating Point emul. .. 5**23│
  2270. └─────────────────────────────────────────────────────────────────────┘
  2271. note 1) This interrupt emulates opcode 0DCh.
  2272.      2) PC-MOS/386 versions prior to 4.00 use this interrupt to 
  2273.         interface with the PC-MOS API.  Version 4.00 and later use int 
  2274.         0D4h for the API.  See the Chapter 13 for the PC-MOS API. 
  2275.  
  2276.  
  2277. ┌─────────────────────────────────────────────────────────────────────┐
  2278. │Interrupt 39h   Turbo/Microsoft langs - Floating Point emul. .. 5**24│
  2279. └─────────────────────────────────────────────────────────────────────┘
  2280. note    This interrupt emulates opcode 0DDh.
  2281.  
  2282.  
  2283. ┌─────────────────────────────────────────────────────────────────────┐
  2284. │Interrupt 3Ah   Turbo/Microsoft langs - Floating Point emul. .. 5**25│
  2285. └─────────────────────────────────────────────────────────────────────┘
  2286. note    This interrupt emulates opcode 0DEh.
  2287.  
  2288.  
  2289. ┌─────────────────────────────────────────────────────────────────────┐
  2290. │Interrupt 3Bh   Turbo/Microsoft langs - Floating Point emul. .. 5**26│
  2291. └─────────────────────────────────────────────────────────────────────┘
  2292. note    This interrupt emulates opcode 0DFh.
  2293.  
  2294.  
  2295. ┌─────────────────────────────────────────────────────────────────────┐
  2296. │Interrupt 3Ch   Turbo/Microsoft langs - Floating Point emul. .. 5**27│
  2297. └─────────────────────────────────────────────────────────────────────┘
  2298. note    This interrupt emulates instructions with an ES segment
  2299.         override.
  2300.  
  2301.  
  2302. ┌─────────────────────────────────────────────────────────────────────┐
  2303. │Interrupt 3Dh   Turbo/Microsoft langs - Floating Point emul. .. 5**28│
  2304. └─────────────────────────────────────────────────────────────────────┘
  2305. note    This interrupt emulates a standalone FWAIT instruction
  2306.  
  2307.  
  2308. ┌─────────────────────────────────────────────────────────────────────┐
  2309. │Interrupt 3Eh   Turbo/Microsoft langs - Floating Point emul. .. 5**29│
  2310. └─────────────────────────────────────────────────────────────────────┘
  2311. note    Unknown.
  2312.  
  2313.  
  2314. ┌─────────────────────────────────────────────────────────────────────┐
  2315. │Interrupt 3Fh   Overlay Manager Interrupt (Microsoft LINK.EXE)  5**30│
  2316. └─────────────────────────────────────────────────────────────────────┘
  2317. note 1) Default overlay manager interrupt; may be changed with LINK 
  2318.         command line switch. (Microsoft/IBM LINK.EXE) 
  2319.      2) The Microsoft Dynamic Link Library manager uses this 
  2320.         interrupt. 
  2321.  
  2322.  
  2323. ┌─────────────────────────────────────────────────────────────────────┐
  2324. │Interrupt 40h   Hard Disk BIOS ................................ 5**31│
  2325. └─────────────────────────────────────────────────────────────────────┘
  2326.                 Pointer to disk BIOS entry when a hard disk controller
  2327.                 is installed.  The BIOS routines use int 30h to
  2328.                 revector the diskette handler (original int 13h) here
  2329.                 so int 40h may be used for hard disk control.
  2330. note 1) Keyboard interrupt for DEC Rainbow.
  2331.  
  2332.  
  2333. ┌─────────────────────────────────────────────────────────────────────┐
  2334. │Interrupt 41h   Hard Disk Parameters .......................... 5**32│
  2335. └─────────────────────────────────────────────────────────────────────┘
  2336.                 Pointer to first Hard Disk Parameter Block, normally
  2337.                 located in the controller card's ROM.  This table may
  2338.                 be copied to RAM and changed, and this pointer
  2339.                 revectored to the new table.
  2340. note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
  2341.      2) format of parameter table is:
  2342.         word    cylinders
  2343.         byte    heads
  2344.         word    starting reduced write current cylinder
  2345.                 (XT only, 0 for others)
  2346.         word    starting write pre-comp cylinder
  2347.         byte    maximum ECC burst length
  2348.         byte    control byte
  2349.            bits 0-2     drive option (XT only, 0 for others)
  2350.                 3       set if more than 8 heads
  2351.                 4       always 0
  2352.                 5       set if manufacturer's defect map on
  2353.                         max cylinder+1
  2354.                 6       disable ECC retries
  2355.                 7       disable access retries
  2356.         byte    standard timeout (XT only, 0 for others)
  2357.         byte    formatting timeout (XT only, 0 for others)
  2358.         byte    timeout for checking drive (XT only, 0 for others)
  2359.         word    landing zone    (AT, PS/2)
  2360.         byte    sectors/track   (AT, PS/2)
  2361.         byte    0  (zeroes)
  2362.      3) normally vectored to ROM table when system is initialized.
  2363.  
  2364.  
  2365. ┌─────────────────────────────────────────────────────────────────────┐
  2366. │Interrupt 42h   Pointer to screen BIOS entry .................. 5**33│
  2367. └─────────────────────────────────────────────────────────────────────┘
  2368.                 Used by EGA, VGA, PS/2.
  2369.                 Relocated (by EGA, etc.) video handler (original int 10h).
  2370.                 Revectors int 10 (BIOS video) calls to EGA BIOS.
  2371.                 Also used by Zenith Z-100.
  2372.                 MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
  2373.                   controller revectors int 13h to here.
  2374.  
  2375.  
  2376. ┌─────────────────────────────────────────────────────────────────────┐
  2377. │Interrupt 43h   Pointer to EGA Graphics Character Table ....... 5**34│
  2378. └─────────────────────────────────────────────────────────────────────┘
  2379. note 1) The POST initializes this vector pointing to the default table 
  2380.         located in the EGA ROM BIOS.  (PC-2 and up).  Not initialized
  2381.         if EGA is not present. 
  2382.      2) This vector was referred to (mistakenly) as the Video
  2383.         Parameters table in the original EGA BIOS listings. 
  2384.  
  2385.  
  2386. ┌─────────────────────────────────────────────────────────────────────┐
  2387. │Interrupt 44h   Pointer to graphics character table ........... 5**35│
  2388. └─────────────────────────────────────────────────────────────────────┘
  2389. (0:0110h)       This table contains the dot patterns for the first 128
  2390.                 characters in video modes 4,5, and 6, and all 256
  2391.                 characters in all additional graphics modes.  Not
  2392.                 initialized if EGA is not present.
  2393. note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
  2394.      2) Novell NetWare - High-Level Language API.
  2395.      3) Also used by Zenith Z-100.
  2396.  
  2397.  
  2398. ┌─────────────────────────────────────────────────────────────────────┐
  2399. │Interrupt 45h   Reserved by IBM  (not initialized) ............ 5**36│
  2400. └─────────────────────────────────────────────────────────────────────┘
  2401. note    Also used by Zenith Z-100, purpose unknown.
  2402.  
  2403.  
  2404. ┌─────────────────────────────────────────────────────────────────────┐
  2405. │Interrupt 46h   Pointer to second hard disk parameter block ... 5**37│
  2406. └─────────────────────────────────────────────────────────────────────┘
  2407. note 1) AT, XT/286, PS/2.
  2408.      2) (see int 41h) (except ESDI hard disks) (not initialized unless
  2409.         specific user software calls for it)
  2410.      3) Also used by Zenith Z-100.
  2411.  
  2412.  
  2413. ┌─────────────────────────────────────────────────────────────────────┐
  2414. │Interrupt 47h   Reserved by IBM  (not initialized) ............ 5**38│
  2415. └─────────────────────────────────────────────────────────────────────┘
  2416.  
  2417.  
  2418. ┌─────────────────────────────────────────────────────────────────────┐
  2419. │Interrupt 48h   Cordless Keyboard Translation ................. 5**39│
  2420. └─────────────────────────────────────────────────────────────────────┘
  2421. (0:0120h)
  2422. This vector points to code to translate the cordless keyboard 
  2423. scancodes into normal 83-key values.  The translated scancodes are 
  2424. then passed to int 9.  (not initialized on PC or AT) This is valid on 
  2425. the IBM PCjr only.  IBM built a number of prototype XT/2 machines with 
  2426. infrared keyboards which were later sold through salvage outlets, but 
  2427. this was never a production option. 
  2428.  
  2429.  
  2430. ┌─────────────────────────────────────────────────────────────────────┐
  2431. │Interrupt 49h   Non-kbd Scan Code Translation Table Addr (PCjr) 5**40│
  2432. └─────────────────────────────────────────────────────────────────────┘
  2433. (0:0124h)       PCjr translate table, TI Pro video
  2434.  
  2435.     1)  This interrupt is used for operation of non-keyboard devices 
  2436.         on the PCjr, such as the Keytronic Numeric Keypad. This 
  2437.         interrupt has the address of a table used to translate non-
  2438.         keyboard scancodes (greater than 85 excepting 255). This 
  2439.         interrupt can be revectored by a user application. IBM 
  2440.         recommends that the default table be stored at the beginning 
  2441.         of an application that required revectoring this interrupt, 
  2442.         and that the default table be restored when the application 
  2443.         terminates. (not initialized on PC or AT) 
  2444.  
  2445.         The PCjr BIOS can interpret scancodes other than those 
  2446.         generated by the keyboard to allow for expansion. The keyboard 
  2447.         generates scancodes from 01h to 055h, including 0FFh. Any 
  2448.         scancodes above 55h (56h through 7Eh for make codes and 0D6h 
  2449.         through 0FEh for break codes) are processed in the following 
  2450.         manner: 
  2451.           1) if the incoming make code falls within the range of the 
  2452.              translate table whose address is pointed to by int 49h, 
  2453.              it is translated into the corresponding scancode. Any 
  2454.              incoming break codes above 0D5h are ignored. 
  2455.           2) if the new translated scancode is less than 56h, it is 
  2456.              processed by the BIOS as a keyboard scancode and the same 
  2457.              data is placed in the BIOS keyboard buffer. 
  2458.           3) if the translated scancode is higher than 55h or the 
  2459.              incoming scancode is outside the range of the translate 
  2460.              table, 40h is added creating a new extended scancode. The 
  2461.              extended scancode is placed in the BIOS keyboard buffer 
  2462.              with the character code of 00h (NUL). This utilitizes the 
  2463.              range of 96h through 0BEh for scancodes 56h through 7Eh. 
  2464.  
  2465.              The default translate-table maps scancodes 56h through 
  2466.              6Ah to existing keyboard values. Codes 6Bh theough 0BEh 
  2467.              are mapped (by adding 40h) to extended codes 0ABh through 
  2468.              0FEh since they are outside the range of the default 
  2469.              translate table. 
  2470.  
  2471.              The format of the translate table is:
  2472.  
  2473.              0       length - the number of nonkeyboard scancodes that 
  2474.                      are mapped within the table (from 1 to n). 
  2475.              1 to n  word  high byte 00h (NUL) byte scancode with low 
  2476.                      order byte representing the scancode mapped 
  2477.                      values relative to their input values within the 
  2478.                      range of 56h through 7Eh. 
  2479.  
  2480.              With this layout, all keyboard scancodes can be intercepted
  2481.              through int 9h and and nonkeyboard scancodes can be
  2482.              intercepted through int 48h.
  2483.  
  2484.     2)  On the TI Professional, this interrupt is used for some video 
  2485.         services. 
  2486.         entry   AH      17h     Get Display Offset
  2487.         return  ES:DI   segment/offset of current display buffer
  2488.         note    The TI Pro has only 2048 bytes of character RAM, but it
  2489.                 is followed by another 2048 bytes of "phantom" RAM
  2490.                 (i.e. the same 2048 bytes are available at two
  2491.                 different addresses) so that wraparound checks need not
  2492.                 be made when writing to the screen. The attribute RAM
  2493.                 is "shadowed" behind the character RAM through the
  2494.                 attribute register.
  2495.  
  2496.     3)  Most of the TI Pro functions are identical to the IBM int 16h 
  2497.         functions, particularly 0 through 0Eh, although 6 and 7 
  2498.         (scroll) are quite different and all cursor addressing has the 
  2499.         rows and columns flipped (i.e. IBM uses DH for row, but TI 
  2500.         uses DH for column). 
  2501.  
  2502.  
  2503. ┌─────────────────────────────────────────────────────────────────────┐
  2504. │Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2, EISA) 5**41│
  2505. └─────────────────────────────────────────────────────────────────────┘
  2506. 1)   Not initialized on PC or AT. 
  2507. 2)   Invoked by PS/2 and Convertible BIOS when real-time clock alarm 
  2508.      occurs. 
  2509. 3)   Used by TI Professional PC for keyboard DSR interface (keyboard 
  2510.      BIOS interrupt)  Functions for AH=0, 1, 2 and 5 are identical to 
  2511.      IBM's int 16h. 
  2512.  
  2513.  
  2514. ┌─────────────────────────────────────────────────────────────────────┐
  2515. │Interrupt 4Bh   Reserved by IBM  (not initialized) ............ 5**42│
  2516. └─────────────────────────────────────────────────────────────────────┘
  2517. note 1) Used by IBM Micro Channel SCSI hard disk controllers.
  2518.      2) Used by Virtual DMA Services Specification  (see Chapter 21 for
  2519.         VDS programming information)
  2520.  
  2521.  
  2522. ┌─────────────────────────────────────────────────────────────────────┐
  2523. │Interrupt 4Ch   Reserved by IBM  (not initialized) ............ 5**43│
  2524. └─────────────────────────────────────────────────────────────────────┘
  2525.  
  2526.  
  2527. ┌─────────────────────────────────────────────────────────────────────┐
  2528. │Interrupt 4Dh   Reserved by IBM  (not initialized) ............ 5**44│
  2529. └─────────────────────────────────────────────────────────────────────┘
  2530.  
  2531.  
  2532. ┌─────────────────────────────────────────────────────────────────────┐
  2533. │Interrupt 4Eh   Reserved by IBM  (not initialized) ............ 5**45│
  2534. └─────────────────────────────────────────────────────────────────────┘
  2535. note    Used instead of int 13h for disk I/O on TI Professional PC.
  2536.  
  2537.  
  2538. ┌─────────────────────────────────────────────────────────────────────┐
  2539. │Interrupt 4Fh   Reserved by IBM  (not initialized) ............ 5**46│
  2540. └─────────────────────────────────────────────────────────────────────┘
  2541.  
  2542.  
  2543. ┌─────────────────────────────────────────────────────────────────────┐
  2544. │Interrupt 50-57 IRQ0-IRQ7 Relocation .......................... 5**47│
  2545. └─────────────────────────────────────────────────────────────────────┘
  2546. note 1) Normally not initialized.
  2547.      2) IRQ0-IRQ7 relocated by DesQview.
  2548.      3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
  2549.  
  2550.  
  2551. ┌─────────────────────────────────────────────────────────────────────┐
  2552. │Interrupt 58h   Reserved by IBM  (not initialized) ............ 5**48│
  2553. └─────────────────────────────────────────────────────────────────────┘
  2554.  
  2555.  
  2556. ┌─────────────────────────────────────────────────────────────────────┐
  2557. │Interrupt 59h   Reserved by IBM  (not initialized) ............ 5**49│
  2558. └─────────────────────────────────────────────────────────────────────┘
  2559.         GSS Computer Graphics Interface (GSS*CGI)
  2560. entry   DS:DX   pointer to block of 5 array pointers
  2561. return  CF      clear
  2562.                 AX      return code
  2563.         CF      set
  2564.                 AX      error code
  2565. note 1) Int 59h is the means by which GSS*CGI language bindings
  2566.         communicate with GSS*CGI device drivers and the GSS*CGI device
  2567.         driver controller.
  2568.      2) Also used by the IBM Graphic Development Toolkit.
  2569.  
  2570.  
  2571. ┌─────────────────────────────────────────────────────────────────────┐
  2572. │Interrupt 5Ah   Reserved by IBM  (not initialized)  ........... 5**50│
  2573. └─────────────────────────────────────────────────────────────────────┘
  2574. note    IBM Cluster Adapter BIOS entry address.
  2575.  
  2576.  
  2577. ┌─────────────────────────────────────────────────────────────────────┐
  2578. │Interrupt 5Bh   Reserved by IBM  (not initialized) ............ 5**51│
  2579. └─────────────────────────────────────────────────────────────────────┘
  2580. note    Used by IBM Cluster Adapter.
  2581.  
  2582.  
  2583. ┌─────────────────────────────────────────────────────────────────────┐
  2584. │Interrupt 5Ah   Cluster Adapter BIOS entry address ............ 5**52│
  2585. └─────────────────────────────────────────────────────────────────────┘
  2586. note    Normally not initialized.
  2587.  
  2588.  
  2589. ┌─────────────────────────────────────────────────────────────────────┐
  2590. │Interrupt 5Bh   Reserved by IBM  (not initialized) ............ 5**53│
  2591. └─────────────────────────────────────────────────────────────────────┘
  2592. note    Used by cluster adapter?
  2593.  
  2594.  
  2595. ┌─────────────────────────────────────────────────────────────────────┐
  2596. │Interrupt 5Ch   NETBIOS interface entry port, TOPS ............ 5**54│
  2597. └─────────────────────────────────────────────────────────────────────┘
  2598. note 1) See Chapter 13 for information on network programming. 
  2599.      2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for 
  2600.         the Pause key on the keyboard.  The TI BIOS allows any user 
  2601.         routine to execute from the Pause interrupt as long as it 
  2602.         eventually returns. 
  2603.      3) Used by Windows/386 by Virtual Machine routines. 
  2604.      4) Used by Novell Netware 2.0. 
  2605.  
  2606.  
  2607. ┌─────────────────────────────────────────────────────────────────────┐
  2608. │Interrupt 5Dh   Reserved by IBM  (not initialized) ............ 5**55│
  2609. └─────────────────────────────────────────────────────────────────────┘
  2610. note    The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
  2611.         keyboard services.
  2612.  
  2613.  
  2614. ┌─────────────────────────────────────────────────────────────────────┐
  2615. │Interrupt 5Eh   Reserved by IBM  (not initialized) ............ 5**56│
  2616. └─────────────────────────────────────────────────────────────────────┘
  2617. note    TI Professional PC - Program Break.
  2618.  
  2619.  
  2620. ┌─────────────────────────────────────────────────────────────────────┐
  2621. │Interrupt 5Fh   Reserved by IBM  (not initialized) ............ 5**57│
  2622. └─────────────────────────────────────────────────────────────────────┘
  2623. note    TI Professional PC - Keyboard queueing.
  2624.  
  2625.  
  2626. ┌─────────────────────────────────────────────────────────────────────┐
  2627. │Interrupt 60h-67h  User Program Interrupts .................... 5**58│
  2628. └─────────────────────────────────────────────────────────────────────┘
  2629. note 1) Available for general use. 
  2630.      2) Some Adaptec hard disk controllers used these interrupts.  
  2631.         Models and usages unknown. 
  2632.      3) Various major programs make standardized use of this group of 
  2633.         interrupts.  Details of common use follows: 
  2634.  
  2635.  
  2636. ┌─────────────────────────────────────────────────────────────────────┐
  2637. │Interrupt 60h   User Program Interrupt ........................ 5**59│
  2638. └─────────────────────────────────────────────────────────────────────┘
  2639. note 1) Used by 10-Net Network OS Interface. 
  2640.      2) Used by FTP Driver - PC/TCP Packet Driver Specification. 
  2641.      3) See Chapter 13 for network programming calls. 
  2642.      4) Used by TOPS netork (TTALK.EXE). 
  2643.      5) The 2-The-Max VGA-16 board TSR zoom utility uses this 
  2644.         interrupt by default.  (see int 61h for details) 
  2645.      6) Versa-Spool print spooler revectors int 17h to here when 
  2646.         installing its own 17h handler.  (see int 61h also) 
  2647.      7) Some older OMTI and Adaptec hard disk controllers used the 
  2648.         interrupts from 60h to 63h as 16 bytes of scratch RAM. 
  2649.      8) Used by GDOSMEM Windows TSR skeleton. 
  2650.         entry   AX      GTSR Identification #
  2651.                 BX      00h     GTSR Installation Check
  2652.         return  BX      GTSR Identification #
  2653.  
  2654.         entry   AX      GTSR Identification #
  2655.                 BX      01h     GTSR Increment WORD in CX:DX
  2656.                 CX      Segment => WORD
  2657.                 DX      Offset  => WORD
  2658.         return  none
  2659.      9) Used by TDOSMEM Windows TSR skeleton.
  2660.         entry   AX      TTSR Identification #
  2661.                 BX      00h     GTSR Installation Check
  2662.         return  BX      GTSR Identification #
  2663.                 CX      Segment => local WORD
  2664.                 DX      Offset  => local WORD
  2665.  
  2666.         entry   AX      TTSR Identification #
  2667.                 BX      01h     GTSR Increment WORD in CX:DX
  2668.         return  none
  2669.  
  2670.  
  2671. ┌─────────────────────────────────────────────────────────────────────┐
  2672. │Interrupt 61h  User Interrupt ................................. 5**  │
  2673. └─────────────────────────────────────────────────────────────────────┘
  2674.      1) Default interrupt used by Chris Dunford's PCED 2.0 API.
  2675.      2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
  2676.  
  2677.         Function  00h   Get Current Mode Value
  2678.         entry   AH      00h
  2679.         return  AL      current mode value
  2680.  
  2681.         Function  01h   Set New Open-Mode Value
  2682.         entry   AH      01h
  2683.                 AL      new value to set
  2684.         return  none
  2685.  
  2686.      3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt
  2687.         by default.
  2688.  
  2689.         Function  00h   Zoom
  2690.         entry   AX      0000h
  2691.                 BX      zoom factor (0-7x)
  2692.         return  none
  2693.  
  2694.         Function  01h   Center Zoomed Window
  2695.         entry   AX      0001h
  2696.                 BX      x coordinate to center
  2697.                 CX      y coordinate to center
  2698.         return  none
  2699.         note    'x' and 'y' will be positioned as close to the center of
  2700.                 the display as possible.
  2701.  
  2702.         Function  02h   End Zoom
  2703.         entry   AX      0002h
  2704.         return  none
  2705.         note    Restores screen to original state.
  2706.  
  2707.         Function  03h   Report Zoom
  2708.         entry   AX      0003h
  2709.         return  AX      zoom factor (0-7)
  2710.  
  2711.         Function  04h   Enter Specify Mode
  2712.         entry   AX      0004h
  2713.         return  none
  2714.         note    This mode is entered whenever the predefined hotkey is
  2715.                 pressed.
  2716.  
  2717.         Function  05h   Query Zoom Window
  2718.         entry   AX      0005h
  2719.                 BX      segment address of return argument array
  2720.                 CX      offset address of return argument array
  2721.         return  BX:CX   14 byte array
  2722.                         offset[0]  x start of zoom window
  2723.                               [1]  y start of zoom window
  2724.                               [2]  x end of zoom window
  2725.                               [3]  y end of zoom window
  2726.                               [4]  current zoom factor
  2727.                               [5]  zoom offset start x
  2728.                               [6]  zoom offset start y
  2729.  
  2730.         Function  06h   Set Zoom Window
  2731.         entry   AX      0006h
  2732.                 BX      segment address of window coordinate array
  2733.                 CX      offset address of window coordinate array
  2734.         return  BX:CX   array
  2735.                         offset[0]  x start of zoom window
  2736.                               [1]  y start of zoom window
  2737.                               [2]  x end of zoom window
  2738.                               [3]  y end of zoom window
  2739.      4) Versa-Spool print spooler revectors int 1Ch to here when
  2740.         installing its own 1Ch handler.
  2741.  
  2742.  
  2743. ┌─────────────────────────────────────────────────────────────────────┐
  2744. │Interrupt 63h  User Program Interrupt                                │
  2745. └─────────────────────────────────────────────────────────────────────┘
  2746. This interrupt is used by Novell NetWare v2.0.
  2747.  
  2748.  
  2749. ┌─────────────────────────────────────────────────────────────────────┐
  2750. │Interrupt 64h  User Program Interrupt                                │
  2751. └─────────────────────────────────────────────────────────────────────┘
  2752. This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
  2753.  
  2754.  
  2755. ┌─────────────────────────────────────────────────────────────────────┐
  2756. │Interrupt 65h  User Program Interrupt                                │
  2757. └─────────────────────────────────────────────────────────────────────┘
  2758. This interrupt is used by Novell NetWare v2.0.
  2759.  
  2760.  
  2761. ┌─────────────────────────────────────────────────────────────────────┐
  2762. │Interrupt 67h   User Program Interrupt ........................ 5**60│
  2763. └─────────────────────────────────────────────────────────────────────┘
  2764. note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification 
  2765.         3.1 and higher.  (EMS and LIM) 
  2766.      2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory 
  2767.         Specification 3.1 and higher.  (EEMS) 
  2768.      3) Used by Phar Lap/Quarterdeck VCPI v1.0. 
  2769.      4) See Chapter 10 for EMS/EEMS programming information. 
  2770.      5) The Advanced Digital PC Slave board (also marketed by Alloy) 
  2771.         contains its own 8mHz 8086, up to 768K of on-card memory and a 
  2772.         built-in monochrome monitor adapter, communicating with an 
  2773.         RS232 terminal at 19.2KBaud.  Their operating system is an 
  2774.         adaptation of MSDOS 2.11 called RTNX or ATNX.  ?TNX uses 
  2775.         interrupt 67h for record locking, using an "interrupt 67h 
  2776.         semaphore" system in which a data record access must be 
  2777.         preceded by a call to int 67h with a string that contains a 
  2778.         filename and a record number to lock. 
  2779.      6) Some Adaptec hard disk controllers have problems related to 
  2780.         their use of int 67h.  Supposedly the Adaptec can be made to 
  2781.         use a driver instead of ROM.  The driver is generated by 
  2782.         running the ROM program at C800:5 and this fixes the problem.  
  2783.         Apparently this driver is called ADAPTEC.DRV.  Check with 
  2784.         Adaptec if you suspect a problem. 
  2785.      7) IBM issued a known bug report listing a fault in DOS 4.0's 
  2786.         network handling within IBMBIO.COM.  The exact wording of the 
  2787.         report is: 
  2788.         IR79404   WAIT   IBMBIO   INT 2FH for INT 67H causes hang
  2789.      8) Used by PC-Net semaphore calls.
  2790.  
  2791. ┌─────────────────────────────────────────────────────────────────────┐
  2792. │Interrupt 68h   Not Used  (not initialized) ................... 5**61│
  2793. └─────────────────────────────────────────────────────────────────────┘
  2794. note 1) APPC/PC Network Interface. See Chapter 13.
  2795.      2) Some Toshiba laptop hard disk controllers use this interrupt.
  2796.      3) Used by HDTest to communicate with BIOS entry point.
  2797.      4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
  2798.  
  2799.  
  2800. ┌─────────────────────────────────────────────────────────────────────┐
  2801. │Interrupt 69h   Not Used  (not initialized) ................... 5**62│
  2802. └─────────────────────────────────────────────────────────────────────┘
  2803.  
  2804.  
  2805. ┌─────────────────────────────────────────────────────────────────────┐
  2806. │Interrupt 6Ah   Not Used  (not initialized) ................... 5**63│
  2807. └─────────────────────────────────────────────────────────────────────┘
  2808. note    Used by SLR System's OPTHELP.COM, a TSR help system for their 
  2809.         OPTASM assembler.  OPTHELP may be configured to interrupts 
  2810.         from 60h to 7Fh. 
  2811.  
  2812.  
  2813. ┌─────────────────────────────────────────────────────────────────────┐
  2814. │Interrupt 6Bh   Not Used  (not initialized) ................... 5**64│
  2815. └─────────────────────────────────────────────────────────────────────┘
  2816.  
  2817.  
  2818. ┌─────────────────────────────────────────────────────────────────────┐
  2819. │Interrupt 6Ch   System Resume Vector (Convertible) ............ 5**65│
  2820. └─────────────────────────────────────────────────────────────────────┘
  2821. note 1) This vector is not initialized on the PC, XT, or PCJr.
  2822.      2) DOS 3.2 Realtime Clock update uses this interrupt.
  2823.  
  2824.  
  2825. ┌─────────────────────────────────────────────────────────────────────┐
  2826. │Interrupt 6Dh   Not Used  (not initialized) ................... 5**66│
  2827. └─────────────────────────────────────────────────────────────────────┘
  2828. note    Used internally by VGA adapter -  IBM, Paradise, Video 7, NCR
  2829.  
  2830.  
  2831. ┌─────────────────────────────────────────────────────────────────────┐
  2832. │Interrupt 6Eh   Not Used  (not initialized) ................... 5**67│
  2833. └─────────────────────────────────────────────────────────────────────┘
  2834.  
  2835.  
  2836.  
  2837. ┌─────────────────────────────────────────────────────────────────────┐
  2838. │Interrupt 6Fh   10-Net API..................................... 5**68│
  2839. └─────────────────────────────────────────────────────────────────────┘
  2840. note 1) See Chapter 13 for information on the 10-Net API.
  2841.      2) HP ES-12 Extended BIOS
  2842.         a) Read CMOS Memory
  2843.         entry   AH      22h
  2844.                 BL      address of CMOS byte to read
  2845.                 BP      0012h
  2846.         return  AH      status
  2847.                 AL      byte read
  2848.                 BP, DS  destroyed
  2849.         b) Write CMOS Memory
  2850.         entry   AH      24h
  2851.                 AL      new value
  2852.                 BL      address of CMOS byte to write
  2853.                 BP      0012h
  2854.         return  AH      status
  2855.                 BP, DS  destroyed
  2856.      3) Novell NetWare - PCOX API (3270 PC terminal interface).
  2857.  
  2858.  
  2859. ┌─────────────────────────────────────────────────────────────────────┐
  2860. │Interrupt 70h   IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) . 5**69│
  2861. └─────────────────────────────────────────────────────────────────────┘
  2862.  
  2863.         This interrupt services the real-time clock hardware.  The 
  2864.         hardware supports 2 modes of operation, an interrupt at a 
  2865.         specific 24 hour interval (i.e 9:42 am), or repeatedly every 
  2866.         0.976 ms (1,024 kHz). Both modes can operate at the same time 
  2867.         if needed. 
  2868.  
  2869.         In the 24 hour alarm mode, the interrupt is vectored here by 
  2870.         hardware and interrupt 4Ah is called to alert the application 
  2871.         program of the alarm.  Int 4Ah is not handled by the BIOS 
  2872.         other than to return, and is normally revectored by a 
  2873.         particular application using the alarm. 
  2874.  
  2875.         When repeating interrupt mode is active, the 32-bit 
  2876.         microsecond counter consisting of timer_clk_low and 
  2877.         timer_clk_hi is decremented by 976 us on every interrupt.  
  2878.         When the timer reaches zero, the byte pointed to by the offset 
  2879.         @timer_wait_off and and segment @timer_wait_seg is set to 80h 
  2880.         (this pointer is set by an application program through int 1Ah 
  2881.         function ah=6). 
  2882.  
  2883.         The Motorola MC146818A real time clock chip, or its 
  2884.         equivalent, can be programmed to generate the real time clock 
  2885.         interrupt (int 70h) approximately 1024 times per second.  The 
  2886.         BIOS Real Time Clock ISR is invoked on each real time clock 
  2887.         interrupt.  Only AT BIOSs support the Real Time Clock ISR. 
  2888.  
  2889.         The BIOS initializes the int 70h vector to address F000:5124h. 
  2890.  
  2891.         Three AT BIOS functions interface with the int 70h Real Time
  2892.         Clock ISR.  These are:
  2893.                 int 15h, AH 83h   Event Wait Interval
  2894.                 int 15h, AH 86h   Wait
  2895.                 int 1Ah, AH 06h   Set User Alarm
  2896.  
  2897.  
  2898. ┌─────────────────────────────────────────────────────────────────────┐
  2899. │Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) . 5**70│
  2900. └─────────────────────────────────────────────────────────────────────┘
  2901. note    LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
  2902.  
  2903.  
  2904. ┌─────────────────────────────────────────────────────────────────────┐
  2905. │Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved .......... 5**71│
  2906. └─────────────────────────────────────────────────────────────────────┘
  2907. note    Hardware servicer (called by hardware 8259-2, IRQ 10).
  2908.  
  2909.  
  2910. ┌─────────────────────────────────────────────────────────────────────┐
  2911. │Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved .......... 5**72│
  2912. └─────────────────────────────────────────────────────────────────────┘
  2913. note    Hardware servicer (called by hardware 8259-2, IRQ 11).
  2914.  
  2915.  
  2916. ┌─────────────────────────────────────────────────────────────────────┐
  2917. │Interrupt 74h   IRQ 12  Mouse Interrupt (PS/2) ................ 5**73│
  2918. └─────────────────────────────────────────────────────────────────────┘
  2919. note    Hardware servicer (called by hardware 8259-2, IRQ 12).
  2920.  
  2921.  
  2922. ┌─────────────────────────────────────────────────────────────────────┐
  2923. │Interrupt 75h   IRQ 13, Coprocessor Error (AT) ................ 5**74│
  2924. └─────────────────────────────────────────────────────────────────────┘
  2925. note 1) BIOS redirects math coprocessor errors to int 2 (NMI). 
  2926.      2) The math co-processor 80287 invokes this interrupt.  Int 75h 
  2927.         calls the non-maskable interrupt int 2 to halt the system. 
  2928.         (80287 is not used if this vector is left pointing here). 
  2929.         Programs which use the 80287 must re-vector this interrupt to 
  2930.         use the 80287. 
  2931.      3) Under DOS 3.2, this interrupt is routed through the DOS 
  2932.         interrupt stack pool like device interrupts.  However, 
  2933.         coprocessor exceptions generally do not resume via IRET and 
  2934.         this fill the interrupt pool (stacks allocated and never 
  2935.         deallocated) on exceptions.  Microsoft has a patch available 
  2936.         for DOS 3.2. 
  2937.      4) Weitek ABACUS x167 math coprocessor exception handler shares 
  2938.         this interrupt with Intel 80x87 if present. 
  2939.  
  2940.  
  2941. ┌─────────────────────────────────────────────────────────────────────┐
  2942. │Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75│
  2943. └─────────────────────────────────────────────────────────────────────┘
  2944. note 1) Called by hardware 8259-2 IRQ 14.
  2945.      2) When the hard disk controller has completed its task, it 
  2946.         signals completion though hardware activation of int 76h. The 
  2947.         status in hdsk_int_flags is set to "done", a value of 0FFh. 
  2948.         Int 15/fn91h may also be called to signal the interrupt is 
  2949.         done. 
  2950.  
  2951.  
  2952. ┌─────────────────────────────────────────────────────────────────────┐
  2953. │Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved ........... 5**76│
  2954. └─────────────────────────────────────────────────────────────────────┘
  2955. note    Future services (called by hardware 8259-2 IRQ 15).
  2956.  
  2957.  
  2958. ┌─────────────────────────────────────────────────────────────────────┐
  2959. │Interrupt 78h   Not Used ...................................... 5**77│
  2960. └─────────────────────────────────────────────────────────────────────┘
  2961. note 1) Used by Novell Netware 2.0 - non-dedicated shell. 
  2962.      2) DESQview uses ints 78h-7Fh for itself to revector the 8259 
  2963.         interrupt controllers. 
  2964.  
  2965.  
  2966. ┌─────────────────────────────────────────────────────────────────────┐
  2967. │Interrupt 79h   Not Used ...................................... 5**78│
  2968. └─────────────────────────────────────────────────────────────────────┘
  2969.  
  2970. note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest 
  2971.         Group in releases after late '86. 
  2972.      2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default). 
  2973.  
  2974.  
  2975. ┌─────────────────────────────────────────────────────────────────────┐
  2976. │Interrupt 7Ah   Reserved ...................................... 5**79│
  2977. └─────────────────────────────────────────────────────────────────────┘
  2978. note 1) Novell NetWare - Low-Level API APX, versions 2.0a+.  See 
  2979.         Chapter 13. 
  2980.      2) AutoCAD Device Interface, used by various video boards. 
  2981.      3) IBM 3270 Emulator program. 
  2982.      4) Also used by early versions of "File Access Utility" by 
  2983.         Automated Insurance Resource Systems.  AIRS changed to a 
  2984.         different interrupt in late '86 to eliminate conflict with 
  2985.         Novell. 
  2986.      5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest 
  2987.         Group in versions 2.5 and higher before late '86.  Lanquest 
  2988.         changed to int 79h to prevent Novell conflict. 
  2989.  
  2990.  
  2991. ┌─────────────────────────────────────────────────────────────────────┐
  2992. │Interrupt 7Bh-7Eh  Not Used by IBM ............................ 5**80│
  2993. └─────────────────────────────────────────────────────────────────────┘
  2994.         Btrieve API
  2995. entry   register unknown
  2996.         functions:
  2997.         00h     open
  2998.         01h     close
  2999.         02h     insert
  3000.         03h     update
  3001.         04h     delete
  3002.         05h     get_equal
  3003.         06h     get_next
  3004.         07h     get_prev
  3005.         08h     get_greater
  3006.         09h     get_gr_eql
  3007.         0Ah     get_less
  3008.         0Bh     get_less_eq
  3009.         0Ch     get_first
  3010.         0Dh     get_last
  3011.         0Eh     create
  3012.         0Fh     stat
  3013.         10h     extend
  3014.         11h     set_dir: set directory information
  3015.         12h     get_dir: get directory information
  3016.         13h     begin_trans
  3017.         14h     end_trans
  3018.         15h     abort_trans
  3019.         16h     get_pos: get record position number
  3020.         17h     get_direct: get data by sending record position
  3021.         18h     step_direct
  3022.         19h     stop
  3023.         1Ah     version
  3024.         1Bh     unlock
  3025.         1Ch     reset
  3026. return  unknown
  3027. note    Btrieve sets low byte of vector to 33h; this serves as the 
  3028.         installation check. 
  3029.  
  3030.  
  3031. ┌─────────────────────────────────────────────────────────────────────┐
  3032. │Interrupt 7Bh   Novell ........................................ 5**  │
  3033. └─────────────────────────────────────────────────────────────────────┘
  3034. note 1) BTRIEVE from Softcraft, Inc.
  3035.      2) IPX on Proteon networks with ANW 2.0 or greater.
  3036.      3) Air File by Automated Insurance Resource Systems.
  3037.  
  3038.  
  3039. ┌─────────────────────────────────────────────────────────────────────┐
  3040. │Interrupt 7Ch   REXX-PC API ................................... 5**81│
  3041. └─────────────────────────────────────────────────────────────────────┘
  3042.         IBM REXX-PC macro language
  3043. entry   AX      0000h   Initialize
  3044.         DS:SI   pointer to null terminated name of program to be 
  3045.                 executed 
  3046.         EB:BX   pointer to null terminated argument string to be passed 
  3047.                 to the program 
  3048.         DX:DI   pointer to an environment control block in the format:
  3049.                 dword   offset in segment to signature string The 
  3050.                         segment is that contained in DX and the 
  3051.                         signature is the uppercase ASCIIZ string 
  3052.                         "REXX". 
  3053.                 dword   offset in DX to environment name ASCIIZ string 
  3054.                         note: The environment name will be truncated if
  3055.                               longer than 32 characters.
  3056.                 dword   offset in DX to the file extension ASCIIZ 
  3057.                         string 
  3058.                 dword   path search - word value of 0 or non-zero. This 
  3059.                         controls the searching of the path for commands 
  3060.                         that might be REXX programs. 0 means no search 
  3061.                         made, non-zero means search first. 
  3062.                 dword   x'AAAA'
  3063.                         This is a signature that allows REXXPC88 to 
  3064.                         call your own defined routine when a command 
  3065.                         expression needs to be processed. 
  3066.                 DD      Segment:offset (standard INTEL format) of 
  3067.                         environment work buffer, the first double word 
  3068.                         of the buffer MUST be the entry point address 
  3069.                         of the environment service routine to be 
  3070.                         called.  The rest of the buffer may be used in 
  3071.                         any way you choose and will NOT be examined or 
  3072.                         modified by REXXPC88. 
  3073. return  none 
  3074. note 1) The only way to tell if the program exists and can be executed 
  3075.         is by examining a value returned by the program in the next 
  3076.         call described below.  If the program returns an end of 
  3077.         program indication and a string was expected instead, it means 
  3078.         that the program was not found or could not be executed for 
  3079.         some reason. 
  3080.      2) All registers except SS and SP are destroyed.  The caller must 
  3081.         save any other registers of interest. 
  3082.  
  3083.  
  3084. Function 01h Interpret REXX Command
  3085.         This call tells REXXPC88 to interpret the REXXPC88 program 
  3086.         until a value is produced. 
  3087. entry   AX      0001h 
  3088. return  DS:DX   points to a result string, terminated by a CR + LF + 
  3089.                 NULL. The final result string (which marks the end of 
  3090.                 the program) consists of nothing but EOF + NULL. 
  3091.                 REXXPC88 will continue to return this "end of program" 
  3092.                 string until reinitialized via an AX=01h call as 
  3093.                 described above. 
  3094. note    All registers except SS and SP are destroyed.  The caller must 
  3095.         save any other registers of interest. 
  3096.  
  3097.  
  3098. Function 02h  Termination
  3099.         This call allows resident REXXPC88 extensions to terminate 
  3100.         execution of a REXXPC88 program, typically after detecting an 
  3101.         error. 
  3102. entry   AX      0002h
  3103.         DS:SI   points to null terminated string to be displayed as an 
  3104.                 error message before terminating the REXXPC88 program. 
  3105. return  none 
  3106. note    Terminates the REXXPC88 program and returns control to DOS.
  3107.  
  3108.  
  3109. Function 03h  Load
  3110.         This call tells REXXPC88 to look up a program variable and 
  3111.         return its current value (if any). 
  3112. entry   AX      0003h
  3113.         DS:SI   points to null terminated name of REXXPC88 program 
  3114.                 variable. 
  3115.         DS:DX   points to the null terminated string value of the 
  3116.                 program variable. DX is zero if the program variable is 
  3117.                 currently undefined. This string is in REXXPC88's data 
  3118.                 area and must be treated as read-only. 
  3119. return  none
  3120. note 1) All registers except SS and SP are destroyed. The caller must 
  3121.         save any other registers of interest. 
  3122.  
  3123.  
  3124. Function 04h  Store
  3125.         This call tells REXXPC88 to store a null terminated string as 
  3126.         the value of a program variable. 
  3127. entry   AX      0004h
  3128.         DS:SI   points to null terminated name of REXXPC88 program 
  3129.                 variable 
  3130.         ES:BX   points to null terminated string to be assigned to the 
  3131.                 variable 
  3132. return  none 
  3133. note 1) The string is copied into REXXPC88's data dictionary.  If 
  3134.         there is insufficient storage to store the string, REXXPC88 
  3135.         terminates execution of the program with an error message and 
  3136.         returns to DOS. 
  3137.      2) Registers: all registers except SS and SP are destroyed.  The 
  3138.         caller must save any other registers of interest. 
  3139.  
  3140.  
  3141. Function 05h  User-Written Extensions
  3142. entry   AX       0005h
  3143.         SS:BP   points to a C stack frame containing a two-byte pointer 
  3144.                 to the null terminated function name, a two-byte integer 
  3145.                 specifying the number of arguments, and a two-byte 
  3146.                 pointer to an array of pointers (each two bytes) to the 
  3147.                 arguments (each argument is a null terminated string). 
  3148. return  DS:SI   must point to a null terminated result string. A pointer 
  3149.                 of NIL (DS = 0, SI = 0) is reserved by REXXPC88 and 
  3150.                 indicates that "no REXXPC88 extensions answered the 
  3151.                 function". 
  3152. note 1) Registers: all registers except SS, SP, and BP are available 
  3153.         for use. 
  3154.      2) Stack: Since the amount of REXXPC88 stack space remaining for 
  3155.         growth can't be ascertained by the user extension program, the 
  3156.         user may wish to switch to a local stack if he requires more 
  3157.         than about 128 bytes of stack growth. 
  3158.  
  3159.  
  3160. Function 06h Queue
  3161.         This call tells REXXPC88 to place data on the data or external 
  3162.         interrupt queue either FIFO or LIFO. 
  3163. entry   AX      06h
  3164.         BH      00h     Internal data queue accessible via PULL and 
  3165.                         PARSE PULL 
  3166.                 01h     External interrupt queue accessible via 
  3167.                         LINEIN(EXQUE) 
  3168.         BL      00h     Queue data FIFO on selected queue 
  3169.                 01h     Queue data LIFO on selected queue 
  3170.         DS:SI   points to null terminated string to be queued. 
  3171. return  AX      0000h   Message queued successfully. 
  3172.                 0001h   No REXXPC88 program running at current time. 
  3173.                         Message not queued. 
  3174.                 0002h   Not enough storage available for message.  
  3175.                         Message not queued. 
  3176.                 0003h   Either BH (queue number) or BL (FIFO/LIFO flag) 
  3177.                         out of range. Message not queued. 
  3178. note 1) For the Internal data queue a string may not exceed 127 
  3179.         characters. 
  3180.      2) For the External int. queue a string may not exceed available 
  3181.         storage. 
  3182.      3) Registers: all registers except SS and SP are destroyed.  The 
  3183.         caller must save any other registers of interest. 
  3184.  
  3185.  
  3186. Function 07h  Check for Loaded Extension
  3187.         This call provides a way for a REXXPC88 extension to find out 
  3188.         if a copy is already loaded, and to exchange information with 
  3189.         a resident version. 
  3190. entry   AX      0007h
  3191.         SS:BP   points to a C stack frame containing a two-byte pointer 
  3192.                 to the null terminated name of the REXXPC88 extension. 
  3193. return  If the extension is already loaded, then DS:SI points to an 
  3194.         ASCIIZ string '1', and other registers are used as desired by 
  3195.         the extension to communicate with its non-resident copy. 
  3196.         (Generally, this involves pointing ES:BX to the resident 
  3197.         portion's entry point).  If the extension is not yet resident, 
  3198.         then DS:SI points to an ASCIIZ '0'. 
  3199. note    Registers: all registers except SS, SP and BP are available 
  3200.         for use. 
  3201.  
  3202.  
  3203. Function 08h Reserved
  3204.         This call is reserved for communication between REXXSYS.SYS 
  3205.         and REXXIBMR. 
  3206. entry   AX      0008h
  3207. return  none
  3208.  
  3209.  
  3210. Function 09h Check for REXX Installed
  3211.         This call provides external applications a way to determine if 
  3212.         REXXIBMR is installed. 
  3213. entry   AX      09h
  3214. return  AX      0FFFFh  REXXIBMR is not installed
  3215.         AX      0AAAAh  REXXIBMR is installed
  3216. note    It is assumed that your application will inspect the value of 
  3217.         the 7Ch interrupt vector prior to issuing this interrupt.  If 
  3218.         the vector is 0000:0000 then REXXIBMR is not installed and 
  3219.         this function will cause the system to crash. 
  3220.  
  3221.  
  3222. Function 0Ah  Uninstall resident version of REXX
  3223.         This call is used to uninstall a resident version
  3224. entry   AX      000Ah
  3225.         BX      0AAAAh
  3226. return  AX      0000h   Resident version uninstalled 
  3227.                 0001h   Resident version cannot uninstall, as one 
  3228.                         interrupt vector has been modified by some 
  3229.                         other program in a non-conforming manner. 
  3230.                 0FFFFh  The installed resident version does NOT support 
  3231.                         the uninstall request code (i.e., it is pre 
  3232.                         0.55 level). 
  3233.  
  3234.  
  3235. ┌─────────────────────────────────────────────────────────────────────┐
  3236. │Interrupt 7Fh   IBM 8514/A Graphics Adapter API ............... 5**82│
  3237. └─────────────────────────────────────────────────────────────────────┘
  3238. note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters 
  3239.         unknown. 
  3240.      2) Used by second copy of COMMAND set with SHELL=. 
  3241.      3) Not used by COMMAND /C at DOS prompt. 
  3242.      4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and 
  3243.         Multiport/2) use int 7Fh as a method of communication between 
  3244.         the system-unit resident interrupt handler and the RTIC card's 
  3245.         operating system.  There is a convention for using it in which 
  3246.         register AX contains the signature of the handler that should 
  3247.         handle the interrupt. Some signatures are: 
  3248.                 AX    0200h    is a call to the current task dispatcher 
  3249.                                (from the BTRIEVE application 
  3250.                                interface). 
  3251.                 AX    0101h    is a call from an application to the 
  3252.                                RTIC function request mechanism. 
  3253.                 AX    0FEEDh   is a call from the ICAINTH.SYS interrupt 
  3254.                                handler. 
  3255.      5) MultiLink Advanced (a custom version of PC-MOS/386), versions 
  3256.         3.03 and higher, from The Software Link, Inc. 
  3257.         Function  02h   Invoke user interface (multitasking DOS shell)
  3258.         entry   AH      02h
  3259.                 AL      00h
  3260.         return  unknown
  3261.         Function  0Dh   Set new spooler parameters
  3262.         entry   AH      0Dh
  3263.                 AL      ASCII code for disposition (D,S,H,N)
  3264.                 BH      ASCII code for priority    (0-9)
  3265.                 BL      ASCII code for class       (A-Z)
  3266.         return  AL      Error
  3267.                         00h     OK
  3268.                         01h     no spooler installed
  3269.                         02h     invalid request
  3270.         Function  0Eh   Get spooler parameters
  3271.         entry   AH      0Eh
  3272.         return  AL      01h     if no spooler installed, otherwise:
  3273.                 AL      ASCII code for disposition (D,S,H,N)
  3274.                 BH      ASCII code for priority    (0-9)
  3275.                 BL      ASCII code for class       (A-Z)
  3276.      6) There have been mentions of assorted other little-known 
  3277.         programs using this interrupt.  In view of its use by DOS and 
  3278.         the increasingly-popular 8514/A adapter, it would probably be 
  3279.         wise to avoid int 7Fh for aftermarket application software. 
  3280.      7) Also used by IBM HLLAPI. 
  3281.      8) Used internally by later versions of Tom Mack's RBBS-PC BBS 
  3282.         system. 
  3283.      9) Used by Novell Netware 2.0+ to switch non-dedicated shell to 
  3284.         console mode. 
  3285.  
  3286.  
  3287. ┌─────────────────────────────────────────────────────────────────────┐
  3288. │Interrupt 80h-85h  Reserved by BASIC .......................... 5**83│
  3289. └─────────────────────────────────────────────────────────────────────┘
  3290. note    Interrupts 80h through 0ECh are apparently unused and not
  3291.         initialized in most clone systems.  Not known if GWBASIC or
  3292.         MBASIC use any of these interrupts.
  3293.  
  3294.  
  3295. ┌─────────────────────────────────────────────────────────────────────┐
  3296. │Interrupt 80h   Novell Netware 2.0 ............................ 5**  │
  3297. └─────────────────────────────────────────────────────────────────────┘
  3298.  
  3299.  
  3300. ┌─────────────────────────────────────────────────────────────────────┐
  3301. │Interrupt 81h   Novell Netware 2.0 ............................ 5**  │
  3302. └─────────────────────────────────────────────────────────────────────┘
  3303.  
  3304.  
  3305. ┌─────────────────────────────────────────────────────────────────────┐
  3306. │Interrupt 82h   Reserved by BASIC ............................. 5**  │
  3307. └─────────────────────────────────────────────────────────────────────┘
  3308. note 1) Used in some early versions of NEC Multispeed laptop for ROM
  3309.         application management.
  3310.      2) Used by Pecan Software's Pascal compiler (P-system).
  3311.  
  3312.  
  3313. ┌─────────────────────────────────────────────────────────────────────┐
  3314. │Interrupt 81h   Used by Proteon Network ....................... 5**  │
  3315. └─────────────────────────────────────────────────────────────────────┘
  3316.  
  3317.  
  3318. ┌─────────────────────────────────────────────────────────────────────┐
  3319. │Interrupt 86h   Int 18 when relocated by NETBIOS .............. 5**84│
  3320. └─────────────────────────────────────────────────────────────────────┘
  3321.  
  3322.  
  3323. ┌─────────────────────────────────────────────────────────────────────┐
  3324. │Interrupt 86h-0F0h  Used by BASIC when interpreter is running . 5**85│
  3325. └─────────────────────────────────────────────────────────────────────┘
  3326.  
  3327.  
  3328. ┌─────────────────────────────────────────────────────────────────────┐
  3329. │Interrupt 0A0h-0D0h  TI Professional - free interrupt pool .... 5**  │
  3330. └─────────────────────────────────────────────────────────────────────┘
  3331.  
  3332.  
  3333. ┌─────────────────────────────────────────────────────────────────────┐
  3334. │Interrupt 0A4h  Right Hand Man API ............................ 5**86│
  3335. └─────────────────────────────────────────────────────────────────────┘
  3336. entry   AH      RHM function  (unknown)
  3337. return  unknown
  3338. note    Right-Hand Man is a shareware TSR desktop utility similar
  3339.         to SideKick.
  3340.  
  3341.  
  3342. ┌─────────────────────────────────────────────────────────────────────┐
  3343. │Interrupt  0D4h PC-MOS/386 API ................................ 5**87│
  3344. └─────────────────────────────────────────────────────────────────────┘
  3345. note    This interrupt is used for access to the PC-MOS/386 4.x
  3346.         operating system's user API.  Previous versions of the OS
  3347.         used interrupt 38h.  See Chapter 13 for MOS API programming
  3348.         information.
  3349.  
  3350.  
  3351. ┌─────────────────────────────────────────────────────────────────────┐
  3352. │Interrupt  0E0h Digital Research CP/M-86 function calls ....... 5**88│
  3353. └─────────────────────────────────────────────────────────────────────┘
  3354. note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector
  3355.         during operation and leaves it pointing somewhere in the TPA
  3356.         on exit.  Perhaps used by the mysterious Lotus add-on program
  3357.         hook?
  3358.      2) Used by Digital Research CP/M-86, Concurrent CP/M and
  3359.         Concurrent DOS API entry points.  Values are typically passed
  3360.         in the DX register and returned in the AX register.
  3361.      3) Used by Larry Himes' PD TBACK background timeslicer for DOS.
  3362.         (very old)
  3363.      4) Used by American Data Technology SmartFAX products.
  3364. entry   AH      20h     Send FAX
  3365.         AL      02h     for FAX format file
  3366.                 03h     for ASCII format file
  3367.         CH      number of redials (0-9). Defaults to 9 if input out of 
  3368.                 range. 
  3369.         CL      backoff time (1-99). 1 unit is 15 sec, value is set to 
  3370.                 99 if out of range 
  3371.         DS:DX   input filename (ASCII). 20 bytes max.
  3372.         DX:BX   dial number. Speed dial number is allowed
  3373. return  AL      (if bit 7 set)  number of files transmitted
  3374.                 (bit 7 not set) 0FFh    file not found
  3375.                                 0FEh    no dial tone
  3376.                                 0FDh    line busy or non-FAX tone
  3377.                                 0FCh    other error
  3378. entry   AH      21h     reserved
  3379.  
  3380. entry   AH      22h     Auto/Manual Transmission Toggle
  3381.         AL      00h     switch to Auto mode (default)
  3382.                 01h     switch to Manual mode
  3383. return  none
  3384.  
  3385. entry   AH      23h     Set Manual Receive Mode
  3386.         AL      00h     switch to Auto mode (default)
  3387.                 01h     switch to Manual mode.  SmartFAX will not
  3388.                         answer phone
  3389. return  none
  3390.  
  3391. entry   AH      24h     Send FAX Handshake to Remote
  3392. note    No other parameters are necessary. No returns.
  3393.  
  3394. entry   AH      25h     Enable/Disable Background Task for Spooling 
  3395.         AL      00h     enabled background operation. Program will put 
  3396.                         the received data in the 80188 to spool. 
  3397.                 01h     disables background operation. Does not spool 
  3398.                         data. Data can be recovered by fns 26h and 27h. 
  3399. return  none 
  3400.  
  3401. entry   AH      26h     Check 80188 Buffer
  3402.         AX      data length
  3403.         BL      00h     some data of the same page appears in the next 
  3404.                         buffer 
  3405.                 01h     end of page, more to follow 
  3406.                 02h     end of page, last page 
  3407.  
  3408. entry   AH      27h     Get Data from 80188 Buffer
  3409.         DS:DX   pointer to buffer to be saved, minimum size 12Kb.
  3410. return  AX      data length
  3411.         BL      00h     some data of the same page appears in the next 
  3412.                         buffer 
  3413.                 01h     end of page, more to follow 
  3414.                 02h     end of page, last page 
  3415.  
  3416. entry   AH      28h     Reset After Receive
  3417. note    Resets SmartFAX for next call. No other parameters.
  3418.  
  3419. entry   AH      29h     Enable/Disable Communication Function
  3420.         AL      00h     enable communication
  3421.                 01h     disable communication
  3422. note    In disable mode, SmartFAX will not send or receive.
  3423.  
  3424.                                                               
  3425. ┌─────────────────────────────────────────────────────────────────────┐
  3426. │Interrupt  0E1h PC Cluster Program ............................ 5**89│
  3427. └─────────────────────────────────────────────────────────────────────┘
  3428. note    This is a pointer to the disk server data table.
  3429.  
  3430.  
  3431. ┌─────────────────────────────────────────────────────────────────────┐
  3432. │Interrupt  0E2h PC Cluster Program ............................ 5**90│
  3433. └─────────────────────────────────────────────────────────────────────┘
  3434. note    Interrupt 1Ch is revectored to here.
  3435.  
  3436.  
  3437. ┌─────────────────────────────────────────────────────────────────────┐
  3438. │Interrupt 0E4h  Logitech Modula-2 v2.0   Monitor Entry ........ 5**91│
  3439. └─────────────────────────────────────────────────────────────────────┘
  3440. entry   AX      05h     monitor entry
  3441.                 06h     monitor exit
  3442.         BX      priority
  3443. return  unknown
  3444.  
  3445.  
  3446. ┌─────────────────────────────────────────────────────────────────────┐
  3447. │Interrupt 0E5h  Not Used ...................................... 5**92│
  3448. └─────────────────────────────────────────────────────────────────────┘
  3449.  
  3450.  
  3451. ┌─────────────────────────────────────────────────────────────────────┐
  3452. │Interrupt 0E6h  Not Used ...................................... 5**93│
  3453. └─────────────────────────────────────────────────────────────────────┘
  3454. note    Used by PKzip file compressor.
  3455.  
  3456.  
  3457. ┌─────────────────────────────────────────────────────────────────────┐
  3458. │Interrupt 0E7h  Not Used ...................................... 5**94│
  3459. └─────────────────────────────────────────────────────────────────────┘
  3460.  
  3461.  
  3462. ┌─────────────────────────────────────────────────────────────────────┐
  3463. │Interrupt 0E8h  Not Used ...................................... 5**95│
  3464. └─────────────────────────────────────────────────────────────────────┘
  3465.  
  3466.  
  3467. ┌─────────────────────────────────────────────────────────────────────┐
  3468. │Interrupt 0E9h  Not Used ...................................... 5**96│
  3469. └─────────────────────────────────────────────────────────────────────┘
  3470.  
  3471.  
  3472. ┌─────────────────────────────────────────────────────────────────────┐
  3473. │Interrupt 0EAh  Not Used ...................................... 5**97│
  3474. └─────────────────────────────────────────────────────────────────────┘
  3475.  
  3476.  
  3477. ┌─────────────────────────────────────────────────────────────────────┐
  3478. │Interrupt 0EBh  Not Used ...................................... 5**98│
  3479. └─────────────────────────────────────────────────────────────────────┘
  3480.  
  3481.  
  3482. ┌─────────────────────────────────────────────────────────────────────┐
  3483. │Interrupt 0ECh  Not Used ...................................... 5**99│
  3484. └─────────────────────────────────────────────────────────────────────┘
  3485.  
  3486.  
  3487. ┌─────────────────────────────────────────────────────────────────────┐
  3488. │Interrupt 0EDh  Not Used ..................................... 5**100│
  3489. └─────────────────────────────────────────────────────────────────────┘
  3490.  
  3491.  
  3492. ┌─────────────────────────────────────────────────────────────────────┐
  3493. │Interrupt 0EEh  Not Used ..................................... 5**101│
  3494. └─────────────────────────────────────────────────────────────────────┘
  3495.  
  3496.  
  3497. ┌─────────────────────────────────────────────────────────────────────┐
  3498. │Interrupt 0EFh  GEM interface (Digital Research) ............. 5**102│
  3499. └─────────────────────────────────────────────────────────────────────┘
  3500. entry   CX      0473h
  3501.         DS:DX   pointer to GEM parameter block
  3502. note    no other parameters are known
  3503.  
  3504.  
  3505. ┌─────────────────────────────────────────────────────────────────────┐
  3506. │Interrupt 0F0h  unknown ...................................... 5**103│
  3507. └─────────────────────────────────────────────────────────────────────┘
  3508. note    1) Used by secondary copy of COMMAND when SHELL= set.
  3509.         2) Not used by COMMAND /C at DOS prompt.
  3510.         3) Used by BASIC while in interpreter.
  3511.  
  3512.  
  3513. ┌─────────────────────────────────────────────────────────────────────┐
  3514. │Interrupts 0F1h-0FFh  (absolute addresses 3C4h-3FFh) ......... 5**104│
  3515. └─────────────────────────────────────────────────────────────────────┘
  3516. note    Location of Interprocess Communications Area.
  3517.  
  3518.  
  3519. ┌─────────────────────────────────────────────────────────────────────┐
  3520. │Interrupt 0F4h  Not Used ............ ........................ 5**105│
  3521. └─────────────────────────────────────────────────────────────────────┘
  3522.  
  3523.  
  3524. ┌─────────────────────────────────────────────────────────────────────┐
  3525. │Interrupt 0F5h  Not Used ............ ........................ 5**106│
  3526. └─────────────────────────────────────────────────────────────────────┘
  3527.  
  3528.  
  3529. ┌─────────────────────────────────────────────────────────────────────┐
  3530. │Interrupt 0F8h  Set Shell Interrupt (OEM) .................... 5**107│
  3531. └─────────────────────────────────────────────────────────────────────┘
  3532.      Set OEM handler for int 21h calls from 0F9h through 0FFh
  3533. entry   AH      0F8h
  3534.         DS:DX   pointer to handler for Functions 0F9h thru 0FFh
  3535. note 1) To reset these calls, pass DS and DX with 0FFFFh.  DOS is set 
  3536.         up to allow ONE handler for all 7 of these calls.  Any call to 
  3537.         these handlers will result in the carry bit being set and AX 
  3538.         will contain 1 if they are not initialized.  The handling 
  3539.         routine is passed all registers just as the user set them.  
  3540.         The OEM handler routine should be exited through an IRET. 
  3541.      2) 10 ms interval timer (Tandy?) 
  3542.  
  3543.  
  3544. ┌─────────────────────────────────────────────────────────────────────┐
  3545. │Interrupt 0F9h  Reserved ..................................... 5**108│
  3546. └─────────────────────────────────────────────────────────────────────┘
  3547. note    First of 8 SHELL service codes, reserved for OEM shell
  3548.         (WINDOW); use like HP Vectra user interface?
  3549.  
  3550.  
  3551. ┌─────────────────────────────────────────────────────────────────────┐
  3552. │Interrupt 0FAh  USART ready (RS-232C) ........................ 5**109│
  3553. └─────────────────────────────────────────────────────────────────────┘
  3554.  
  3555.  
  3556. ┌─────────────────────────────────────────────────────────────────────┐
  3557. │Interrupt 0FBh  USART RS ready (keyboard) .................... 5**110│
  3558. └─────────────────────────────────────────────────────────────────────┘
  3559.  
  3560.  
  3561. ┌─────────────────────────────────────────────────────────────────────┐
  3562. │Interrupt 0FCh  Unknown .......................................5**111│
  3563. └─────────────────────────────────────────────────────────────────────┘
  3564.  
  3565.  
  3566. ┌─────────────────────────────────────────────────────────────────────┐
  3567. │Interrupt 0FDh  reserved for user interrupt .................. 5**112│
  3568. └─────────────────────────────────────────────────────────────────────┘
  3569.  
  3570.  
  3571. ┌─────────────────────────────────────────────────────────────────────┐
  3572. │Interrupt 0FEh  reserved by IBM .............................. 5**113│
  3573. └─────────────────────────────────────────────────────────────────────┘
  3574. note    AT/XT286/PS50+ - vector destroyed by return from protected
  3575.         mode.
  3576.  
  3577.  
  3578. ┌─────────────────────────────────────────────────────────────────────┐
  3579. │Interrupt 0FFh  reserved by IBM .............................. 5**114│
  3580. └─────────────────────────────────────────────────────────────────────┘
  3581. note 1) AT/XT286/PS50+ - vector destroyed by return from protected 
  3582.         mode. 
  3583.      2) Zenith Z-100 (S-100 bus MSDOS) warm boot. 
  3584.  
  3585.  
  3586.